private void givePermission(int id, int role) { var roles = db.RoleChain.Where(g => g.ParentRoleId == role); // avoid setting it multiple times if (!db.UserRoles.Any(x => x.UserId == id && x.PermissionId == role)) { db.UserRoles.Add(new UserRole() { UserId = id, PermissionId = role }); UserRoleAddNoteViewModel uranvm = new UserRoleAddNoteViewModel() { User = userManager.FindByNameAsync(User.Identity.Name).Result, Role = db.Roles.Find(role) }; Dictionary <string, int> actions = cache.Get <Dictionary <string, int> >("SystemUserNoteActions"); Dictionary <int, string> bvsroles = cache.Get <Dictionary <int, string> >("BvsRoles"); UserNote n = new UserNote() { AuthorId = uranvm.User.Id, ActionId = actions["roles"], Created = DateTime.Now, IsDeletable = false, RoleIdNeeded = bvsroles.First(g => g.Value == "Bereichsassistent").Key, UserId = id, Content = this.RenderViewToString("~/Areas/mitarbeit/Views/_NoteTemplates/Role.cshtml", uranvm), UnparsedContent = "" }; db.UserNotes.Add(n); db.SaveChanges(); } var rolesList = roles.ToList(); foreach (var r in rolesList) { givePermission(id, r.ChildRoleId); } }
public ActionResult SetRole(int id, int role, bool status) { User idproof = userManager.FindByIdAsync(id).Result; User currentUser = userManager.FindByNameAsync(User.Identity.Name).Result; if (!currentUser.IsInRole("superadmin", cache, db)) { if (currentUser.Id == id) { Response.StatusCode = 401; Response.TrySkipIisCustomErrors = true; return(Json(null)); } Role r = db.Roles.Find(role); if (r.MetapermissionId == null || !db.UserRoles.Any(g => g.PermissionId == r.MetapermissionId && g.UserId == userManager.FindByNameAsync(User.Identity.Name).Result.Id)) { Response.StatusCode = 401; Response.TrySkipIisCustomErrors = true; return(Json(-2)); } } if (idproof == null) { return(Json(0)); } if (status == false) { if (isInParent(id, role)) { return(Json(-1)); } var uRole = db.UserRoles.Where(g => g.UserId == id && g.PermissionId == role).FirstOrDefault(); if (uRole != null) { db.UserRoles.Remove(uRole); UserRoleAddNoteViewModel uranvm = new UserRoleAddNoteViewModel() { User = userManager.FindByNameAsync(User.Identity.Name).Result, Role = db.Roles.Find(role) }; Dictionary <string, int> actions = cache.Get <Dictionary <string, int> >("SystemUserNoteActions"); Dictionary <int, string> bvsroles = cache.Get <Dictionary <int, string> >("BvsRoles"); UserNote n = new UserNote() { AuthorId = uranvm.User.Id, ActionId = actions["roles"], Created = DateTime.Now, IsDeletable = false, RoleIdNeeded = bvsroles.First(g => g.Value == "Bereichsassistent").Key, UserId = id, Content = this.RenderViewToString("~/Areas/mitarbeit/Views/_NoteTemplates/RoleRemoved.cshtml", uranvm), UnparsedContent = "" }; db.UserNotes.Add(n); db.SaveChanges(); } } else { // set true is recursive, set false isn't. givePermission(id, role); } return(Json(1)); }