public ScopedRoleAssignmentsController(IMapper mapper,
                                        UserManager <ApplicationUser> userManager,
                                        RoleManager <ApplicationRole> roleManager,
                                        FurizaUserScopedRoleStore furizaUserScopedRoleStore,
                                        IdentityErrorDescriber identityErrorDescriber = null)
 {
     this.mapper      = mapper ?? throw new ArgumentNullException(nameof(mapper));
     this.userManager = userManager ?? throw new ArgumentNullException(nameof(userManager));
     this.roleManager = roleManager ?? throw new ArgumentNullException(nameof(roleManager));
     this.furizaUserScopedRoleStore = furizaUserScopedRoleStore ?? throw new ArgumentNullException(nameof(furizaUserScopedRoleStore));
     this.identityErrorDescriber    = identityErrorDescriber ?? throw new ArgumentNullException(nameof(identityErrorDescriber));
 }
Ejemplo n.º 2
0
        public async Task <IActionResult> DeleteAsync(string roleName,
                                                      [FromServices] FurizaUserScopedRoleStore furizaUserScopedRoleStore)
        {
            foreach (FieldInfo fieldInfo in typeof(FurizaMasterRoles).GetFields().Where(x => x.IsStatic && x.IsLiteral))
            {
                if (fieldInfo.GetValue(typeof(FurizaMasterRoles)).ToString() == roleName.Trim().ToLower())
                {
                    throw new DefaultRoleViolatedException();
                }
            }

            var role = await roleManager.Roles
                       .Include(u => u.IdentityUserRoles)
                       .SingleOrDefaultAsync(u => u.NormalizedName == roleName.Trim().ToUpper());

            if (role == null)
            {
                throw new ResourceNotFoundException(new[] { SecurityResourceNotFoundExceptionItem.Role });
            }

            if (role.IdentityUserRoles != null && role.IdentityUserRoles.Any())
            {
                throw new RoleInUseException();
            }

            if (await furizaUserScopedRoleStore.IsRoleInUse(roleName))
            {
                throw new RoleInUseException();
            }

            var deleteResult = await roleManager.DeleteAsync(role);

            if (!deleteResult.Succeeded)
            {
                throw new IdentityOperationException(deleteResult.Errors.Select(e => new IdentityOperationExceptionItem(e.Code, e.Description)));
            }

            return(NoContent());
        }