Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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));
        }