Esempio n. 1
0
        public async Task <ActionResult> EditRole(EditRoleViewModel model)
        {
            AppRole appRole = await RoleManager.FindByIdAsync(model.Role.Id);

            if (appRole == null)
            {
                ViewBag.Error = $"Error occurred while looking for role with ID = {model.Role.Id}";
                return(View("Error"));
            }
            else
            {
                appRole.Name = model.Role.Name;
                IdentityResult result = await RoleManager.UpdateAsync(appRole);

                if (result.Succeeded)
                {
                    return(RedirectToAction("List"));
                }

                foreach (var x in result.Errors)
                {
                    ModelState.AddModelError("", x);
                }

                return(View(model));
            }
        }
Esempio n. 2
0
 public async Task <IdentityResult> UpdateAsync(ApplicationRole role)
 {
     return(await _roleManager.UpdateAsync(role));
 }
        public async Task <IActionResult> RolePermissions(RolePermission model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var role = await _roleManager.Roles
                       .Include(x => x.Claims)
                       .SingleOrDefaultAsync(x => x.Id == model.RoleId);

            if (role == null)
            {
                return(NotFound());
            }

            var selectedPermissions = model.Keys.ToList();

            var roleClaims = role.Claims
                             .Where(x => x.ClaimType == ConstantPolicies.DynamicPermission)
                             .Select(x => x.ClaimValue)
                             .ToList();


            // add new permissions
            var newPermissions = selectedPermissions.Except(roleClaims).ToList();

            foreach (var permission in newPermissions)
            {
                role.Claims.Add(new RoleClaim
                {
                    ClaimType  = ConstantPolicies.DynamicPermission,
                    ClaimValue = permission,
                    GivenOn    = DateTime.Now
                });
            }

            // remove deleted permissions
            var removedPermissions = roleClaims.Except(selectedPermissions).ToList();

            foreach (var permission in removedPermissions)
            {
                var roleClaim = role.Claims
                                .SingleOrDefault(x =>
                                                 x.ClaimType == ConstantPolicies.DynamicPermission &&
                                                 x.ClaimValue == permission);

                if (roleClaim != null)
                {
                    role.Claims.Remove(roleClaim);
                }
            }

            var result = await _roleManager.UpdateAsync(role);

            if (result.Succeeded)
            {
                var users = await _userManager.GetUsersInRoleAsync(role.Name);

                foreach (var user in users)
                {
                    await _userManager.UpdateSecurityStampAsync(user);

                    await _signInManager.RefreshSignInAsync(user);
                }


                return(RedirectToRoute("GetRolePermissions", new { roleName = role.Name }));
            }

            AddErrors(result);

            return(View(model));
        }
Esempio n. 4
0
        public async Task <bool> ChangeRolePermissions(EditRolePermissionsDto model)
        {
            var role = await _roleManger.Roles
                       .Include(x => x.Claims)
                       .SingleOrDefaultAsync(x => x.Id == model.RoleId);

            if (role == null)
            {
                return(false);
            }

            var selectedPermissions = model.Permissions;

            var roleClaims = role.Claims
                             .Where(x => x.ClaimType == ConstantPolicies.DynamicPermission)
                             .Select(x => x.ClaimValue)
                             .ToList();


            // add new permissions
            var newPermissions = selectedPermissions.Except(roleClaims).ToList();

            foreach (var permission in newPermissions)
            {
                role.Claims.Add(new RoleClaim
                {
                    ClaimType    = ConstantPolicies.DynamicPermission,
                    ClaimValue   = permission,
                    CreatedClaim = DateTime.Now,
                    RoleId       = role.Id
                });
            }

            // remove deleted permissions
            var removedPermissions = roleClaims.Except(selectedPermissions).ToList();

            foreach (var permission in removedPermissions)
            {
                var roleClaim = role.Claims
                                .SingleOrDefault(x =>
                                                 x.ClaimType == ConstantPolicies.DynamicPermission &&
                                                 x.ClaimValue == permission);

                if (roleClaim != null)
                {
                    _db.RemoveRange(roleClaim);
                }
            }
            await _db.SaveChangesAsync();

            var result = await _roleManger.UpdateAsync(role);

            if (result.Succeeded)
            {
                var users = await _userManager.GetUsersInRoleAsync(role.Name);

                foreach (var user in users)
                {
                    await _userManager.UpdateSecurityStampAsync(user);

                    //await _signInManager.RefreshSignInAsync(user);
                }

                return(true);
            }

            return(false);
        }