user and role management improvements
This commit is contained in:
		| @ -131,26 +131,34 @@ | ||||
|             { | ||||
|                 if (password == confirm) | ||||
|                 { | ||||
|                     var user = new User(); | ||||
|                     user.SiteId = PageState.Site.SiteId; | ||||
|                     user.Username = username; | ||||
|                     user.Password = password; | ||||
|                     user.Email = email; | ||||
|                     user.DisplayName = string.IsNullOrWhiteSpace(displayname) ? username : displayname; | ||||
|                     user.PhotoFileId = null; | ||||
|  | ||||
|                     user = await UserService.AddUserAsync(user); | ||||
|  | ||||
|                     if (user != null) | ||||
|                     var user = await UserService.GetUserAsync(username, PageState.Site.SiteId); | ||||
|                     if (user == null) | ||||
|                     { | ||||
|                         await SettingService.UpdateUserSettingsAsync(settings, user.UserId); | ||||
|                         await logger.LogInformation("User Created {User}", user); | ||||
|                         NavigationManager.NavigateTo(NavigateUrl()); | ||||
|                         user = new User(); | ||||
|                         user.SiteId = PageState.Site.SiteId; | ||||
|                         user.Username = username; | ||||
|                         user.Password = password; | ||||
|                         user.Email = email; | ||||
|                         user.DisplayName = string.IsNullOrWhiteSpace(displayname) ? username : displayname; | ||||
|                         user.PhotoFileId = null; | ||||
|  | ||||
|                         user = await UserService.AddUserAsync(user); | ||||
|  | ||||
|                         if (user != null) | ||||
|                         { | ||||
|                             await SettingService.UpdateUserSettingsAsync(settings, user.UserId); | ||||
|                             await logger.LogInformation("User Created {User}", user); | ||||
|                             NavigationManager.NavigateTo(NavigateUrl()); | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             await logger.LogError("Error Adding User {Username} {Email}", username, email); | ||||
|                             AddModuleMessage(Localizer["Error Adding User. Please Ensure Password Meets Complexity Requirements And Username And Email Are Not Already In Use."], MessageType.Error); | ||||
|                         } | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         await logger.LogError("Error Adding User {Username} {Email}", username, email); | ||||
|                         AddModuleMessage(Localizer["Error Adding User. Please Ensure Password Meets Complexity Requirements And Username Is Not Already In Use."], MessageType.Error); | ||||
|                         AddModuleMessage(Localizer["Username Already Exists"], MessageType.Warning); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|  | ||||
| @ -13,10 +13,15 @@ | ||||
| } | ||||
| else | ||||
| { | ||||
|     <ActionLink Action="Add" Text="Add User" ResourceKey="AddUser" /> | ||||
|  | ||||
|     <div class="d-flex p-1"> | ||||
|         <input class="form-control mr-4" @bind="@_search" /><button class="btn btn-outline-primary ml-1" @onclick="OnSearch">@Localizer["Search"]</button> | ||||
|     <div class="form-row"> | ||||
|         <div class="col"> | ||||
|             <ActionLink Action="Add" Text="Add User" ResourceKey="AddUser" /> | ||||
|         </div> | ||||
|         <div class="col"> | ||||
|             <div class="input-group flex-nowrap"> | ||||
|                 <input class="form-control" @bind="@_search" /> <button class="btn btn-secondary" @onclick="OnSearch">@Localizer["Search"]</button> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <Pager Items="@userroles"> | ||||
| @ -31,7 +36,10 @@ else | ||||
|                 <ActionLink Action="Edit" Parameters="@($"id=" + context.UserId.ToString())" ResourceKey="EditUser" /> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <ActionDialog Header="Delete User" Message="@Localizer["Are You Sure You Wish To Delete {0}?", context.User.DisplayName]" Action="Delete" Security="SecurityAccessLevel.Admin" Class="btn btn-danger" OnClick="@(async () => await DeleteUser(context))" ResourceKey="DeleteUser" /> | ||||
|                 @if (context.Role.Name != RoleNames.Host) | ||||
|                 { | ||||
|                     <ActionDialog Header="Delete User" Message="@Localizer["Are You Sure You Wish To Delete {0}?", context.User.DisplayName]" Action="Delete" Security="SecurityAccessLevel.Admin" Class="btn btn-danger" OnClick="@(async () => await DeleteUser(context))" ResourceKey="DeleteUser" /> | ||||
|                 } | ||||
|             </td> | ||||
|             <td> | ||||
|                 <ActionLink Action="Roles" Parameters="@($"id=" + context.UserId.ToString())" ResourceKey="Roles" /> | ||||
| @ -57,19 +65,19 @@ else | ||||
|  | ||||
|     private List<UserRole> Search(string search) | ||||
|     { | ||||
|         var results = allroles.Where(item => item.Role.Name == RoleNames.Registered || (item.Role.Name == RoleNames.Host && UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))); | ||||
|  | ||||
|         if (string.IsNullOrEmpty(_search)) | ||||
|         { | ||||
|             return allroles.Where(item => item.Role.Name == RoleNames.Registered).ToList(); | ||||
|             results = results.Where(item =>  | ||||
|                 ( | ||||
|                     item.User.Username.Contains(search, StringComparison.OrdinalIgnoreCase) || | ||||
|                     item.User.Email.Contains(search, StringComparison.OrdinalIgnoreCase) || | ||||
|                     item.User.DisplayName.Contains(search, StringComparison.OrdinalIgnoreCase) | ||||
|                 ) | ||||
|             ); | ||||
|         } | ||||
|         return allroles | ||||
|             .Where(item => item.Role.Name == RoleNames.Registered && | ||||
|                            ( | ||||
|                                item.User.Username.Contains(search, StringComparison.OrdinalIgnoreCase) || | ||||
|                                item.User.Email.Contains(search, StringComparison.OrdinalIgnoreCase) || | ||||
|                                item.User.DisplayName.Contains(search, StringComparison.OrdinalIgnoreCase) | ||||
|                                ) | ||||
|             ) | ||||
|             .ToList(); | ||||
|         return results.ToList(); | ||||
|     } | ||||
|  | ||||
|     private async Task OnSearch() | ||||
|  | ||||
| @ -64,10 +64,10 @@ else | ||||
|             <Row> | ||||
|                 <td>@context.Role.Name</td> | ||||
|                 <td> | ||||
|                     @if (context.Role.Name != RoleNames.Registered) | ||||
|                      { | ||||
|                         <button type="button" class="btn btn-danger" @onclick=@(async () => await DeleteUserRole(context.UserRoleId))>@Localizer["Delete"]</button> | ||||
|                      } | ||||
|                     @if (context.Role.Name != RoleNames.Registered && (context.Role.Name != RoleNames.Host || userid != PageState.User.UserId)) | ||||
|                     { | ||||
|                         <ActionDialog Header="Remove Role" Message="@Localizer["Are You Sure You Wish To Remove This User From The {0} Role?", context.Role.Name]" Action="Delete" Security="SecurityAccessLevel.Admin" Class="btn btn-danger" OnClick="@(async () => await DeleteUserRole(context.UserRoleId))" ResourceKey="DeleteUserRole" /> | ||||
|                     } | ||||
|                 </td> | ||||
|             </Row> | ||||
|         </Pager> | ||||
| @ -92,7 +92,14 @@ else | ||||
|             userid = Int32.Parse(PageState.QueryString["id"]); | ||||
|             User user = await UserService.GetUserAsync(userid, PageState.Site.SiteId); | ||||
|             name = user.DisplayName; | ||||
|             roles = await RoleService.GetRolesAsync(PageState.Site.SiteId); | ||||
|             if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) | ||||
|             { | ||||
|                 roles = await RoleService.GetRolesAsync(PageState.Site.SiteId, true); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 roles = await RoleService.GetRolesAsync(PageState.Site.SiteId); | ||||
|             } | ||||
|             await GetUserRoles(); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
| @ -171,9 +178,10 @@ else | ||||
|                     await UserRoleService.AddUserRoleAsync(userrole); | ||||
|                 } | ||||
|  | ||||
|                 await GetUserRoles(); | ||||
|                 await logger.LogInformation("User Assigned To Role {UserRole}", userrole); | ||||
|                 AddModuleMessage(Localizer["User Assigned To Role"], MessageType.Success); | ||||
|                 await GetUserRoles(); | ||||
|                 StateHasChanged(); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
| @ -192,9 +200,10 @@ else | ||||
|         try | ||||
|         { | ||||
|             await UserRoleService.DeleteUserRoleAsync(UserRoleId); | ||||
|             await GetUserRoles(); | ||||
|             await logger.LogInformation("User Removed From Role {UserRoleId}", UserRoleId); | ||||
|             AddModuleMessage(Localizer["User Removed From Role"], MessageType.Success); | ||||
|             await GetUserRoles(); | ||||
|             StateHasChanged(); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker