예제 #1
0
        //Delete  /api/auth/deleterole
        public async Task <IActionResult> DeleteRole([FromBody] DeleteRoleViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            string roleId   = model.RoleId.Trim();
            string roleName = model.RoleName.Trim();

            if (String.IsNullOrEmpty(roleId) || String.IsNullOrEmpty(roleName))
            {
                return(new JsonResult(await Errors
                                      .GetGenericErrorResponse(
                                          new DeleteRoleResponse()
                {
                    RoleName = "no_id",
                    RoleId = "no_role_name",
                    StatusCode = 400,
                    Error = "Role id or role name is empty.",
                    Description = "Role id or role name is empty",
                    Code = "role_id_or_role_name_is_empty",
                })));
            }

            if (!await _accountsService.RoleExists(roleName))
            {
                return(new JsonResult(await Errors
                                      .GetGenericErrorResponse(
                                          new DeleteRoleResponse()
                {
                    RoleName = roleName,
                    RoleId = model.RoleId,
                    StatusCode = 404,
                    Error = "Role id or role name does not match a role.",
                    Description = "Role id or role name does not match a current role",
                    Code = "role_id_or_role_name_does_not_match_a_role",
                })));
            }

            UsersInRole listOfUsersWithCurrentRole = await _accountsService.GetUsersInRole(roleName);

            if (listOfUsersWithCurrentRole.IsNull)
            {
                return(new JsonResult(await Errors
                                      .GetGenericErrorResponse(
                                          new DeleteUserResponse()
                {
                    Id = "no_id",
                    Email = "no_email",
                    StatusCode = 422,
                    Error = "Get users in role error",
                    Description = "Unable to get users in role.",
                    Code = "get_users_in_role_error",
                })));
            }

            if (listOfUsersWithCurrentRole.User.Any())
            {
                return(new JsonResult(
                           await Errors
                           .GetGenericErrorResponse(
                               new DeleteRoleResponse()
                {
                    RoleName = roleName,
                    RoleId = model.RoleId,
                    StatusCode = 409,
                    Error = "Role is beinging used by users",
                    Description = "Current role is being used by a user. Please remove dependencies before deleting this role.",
                    Code = "Conflict, role_is_being_used_by_users"
                })));
            }

            IdentityRole roleToDelete = await _accountsService.GetRoleByName(roleName);

            IdentityResult deleteRoleResult = await _accountsService.DeleteRole(roleToDelete);

            if (!deleteRoleResult.Succeeded)
            {
                return(new JsonResult(await Errors
                                      .GetGenericErrorResponse(
                                          new DeleteRoleResponse()
                {
                    RoleName = roleName,
                    RoleId = roleId,
                    StatusCode = 422,
                    Error = "Unable to complete delete operation",
                    Description = "Server was unable to delete the role.",
                    Code = "unable_to_complete_delete_operation"
                })));
            }

            await _context.SaveChangesAsync();

            return(new JsonResult(
                       Wrappyfier
                       .WrapDeleteRole(
                           roleToDelete.Id,
                           roleToDelete.Name,
                           200
                           )));
        }