public ActionResult AddEditUser(AddEditUserViewModel model) { var user = _cdb.CtsUser.Include(s => s.CtsRoles) .Where(x => x.Login == model.UserLogin) .FirstOrDefault(s => s.Domain == model.UserDomain); if (user == null) { user = new CtsUser() { Login = model.UserLogin, Domain = model.UserDomain }; _cdb.CtsUser.Add(user); } foreach (var userRole in user.CtsRoles) { if (!model.CtsRoles.ContainsKey(userRole.RoleName)) { model.CtsRoles.Add(userRole.RoleName, true); } } user.CtsRoles.Clear(); user.CtsRoles = model.CtsRoles? .Where(x => x.Value) .Select(x => _cdb.CtsRole.Find(x.Key)) .ToList(); _cdb.SaveChanges(); return(RedirectToAction(model.ReturnView ?? "index")); }
public static ICollection <CtsRole> GetUserRolesFromDb(IIdentity user) { var cdb = new CtsDbContext(); var userLogin = user.Name.Split(new char[] { '\\' }).Last(); var domain = user.Name.Split(new char[] { '\\' }).First(); if (!(Cacher.Instance.TryRead(domain + userLogin + "Roles") is CtsUser ctsUser)) { ctsUser = cdb.CtsUser.Where(x => x.Login == userLogin).FirstOrDefault(x => x.Domain == domain); if (ctsUser != null) { cdb.Entry(ctsUser).Collection(x => x.CtsRoles).Load(); Cacher.Instance.Write(domain + userLogin + "Roles", ctsUser); } else { ctsUser = new CtsUser(); } } return(ctsUser.CtsRoles); }
public AddEditUserViewModel(CtsUser user, List <CtsRole> ctsRoles) { UserLogin = user.Login; UserDomain = user.Domain; CtsRoles = ctsRoles.ToDictionary(x => x.RoleName, x => user.CtsRoles.Contains(x)); }