using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using GreenTree.Maschinenbestellungen.Core.Domain.Rights; using GreenTree.Maschinenbestellungen.Core.Helper; using GreenTree.Maschinenbestellungen.Domain.Model; using GreenTree.Maschinenbestellungen.Web.Models.Rights.User; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace GreenTree.Maschinenbestellungen.Web.Controllers { public class RightsController : Controller { #region DI fields // The global DbContext private readonly OrderDbContext _eRPDbContext; // The global user helper private readonly IUserHelper _userHelper; #endregion #region Ctor /// /// Initializes a new instance of the RightsController class /// /// Global DbContext. /// Global user helper. public RightsController( OrderDbContext eRPDbContext, IUserHelper userHelper) { _eRPDbContext = eRPDbContext; _userHelper = userHelper; } #endregion #region Actions // GET: Rights public ActionResult Index() { var users = _eRPDbContext.Users .ToList() .Select(u => new UserModel(u)); return View("~/Views/Rights/User/Index.cshtml", users); } // GET: Rights/Details/5 public ActionResult Details(int id) { var user = _eRPDbContext.Users .FirstOrDefault(u => u.Id == id); var userModel = new UserModel(user); return View("~/Views/Rights/User/Details.cshtml", userModel); } // GET: Rights/Create public ActionResult Create() { ViewData.Add("AvailablePolicies", Startup._availablePolicies); return View("~/Views/Rights/User/Create.cshtml"); } // POST: Rights/Create [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(UserModel userModel) { if (!ModelState.IsValid) return View("~/Views/Rights/User/Create.cshtml", userModel); var user = new User { Accountname = userModel.Accountname, Password = _userHelper.HashString(userModel.Password, true), Forename = userModel.Forename, Lastname = userModel.Lastname, MailAddress = userModel.MailAddress, Birthdate = userModel.Birthdate, Activated = true }; if (userModel.Policies != null) { user.Policies = new List( userModel.Policies .Select(p => new UserPolicy { PolicyName = p, User = user })); } _eRPDbContext.Users.Add(user); _eRPDbContext.SaveChanges(); return RedirectToAction(nameof(Index)); } // GET: Rights/Edit/5 public ActionResult Edit(int id) { ViewData.Add("AvailablePolicies", Startup._availablePolicies); var user = _eRPDbContext.Users .FirstOrDefault(u => u.Id == id); var userModel = new UserModel(user); return View("~/Views/Rights/User/Edit.cshtml", userModel); } // POST: Rights/Edit/5 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(int id, UserModel userModel) { if (!ModelState.IsValid) return View("~/Views/Rights/User/Edit.cshtml", userModel); var user = _eRPDbContext.Users .FirstOrDefault(u => u.Id == id); user.Accountname = userModel.Accountname; user.Forename = userModel.Forename; user.Lastname = userModel.Lastname; user.MailAddress = userModel.MailAddress; user.Birthdate = userModel.Birthdate; user.Activated = userModel.Activated; user.Policies.Clear(); _eRPDbContext.SaveChanges(); if (userModel.Policies != null) { user.Policies = new List( userModel.Policies .Select(p => new UserPolicy { PolicyName = p, User = user })); } _eRPDbContext.SaveChanges(); return RedirectToAction(nameof(Index)); } // POST: Rights/Delete/5 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Delete(int id, IFormCollection collection) { var user = _eRPDbContext.Users .FirstOrDefault(u => u.Id == id); _eRPDbContext.Users.Remove(user); _eRPDbContext.SaveChanges(); return RedirectToAction(nameof(Index)); } #endregion } }