enhance UserRole service with filtering and moved workload to server for better performance, improve error message details during installation
This commit is contained in:
		| @ -95,11 +95,7 @@ else | ||||
|             roleid = Int32.Parse(PageState.QueryString["id"]); | ||||
|             Role role = await RoleService.GetRoleAsync(roleid); | ||||
|             name = role.Name; | ||||
|             users = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); | ||||
|             users = users | ||||
|                 .Where(u => u.Role.Name == RoleNames.Registered) | ||||
|                 .OrderBy(u => u.User.DisplayName) | ||||
|                 .ToList(); | ||||
|             users = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, RoleNames.Registered); | ||||
|             await GetUserRoles(); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
| @ -113,8 +109,7 @@ else | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             userroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); | ||||
|             userroles = userroles.Where(item => item.RoleId == roleid).ToList(); | ||||
|             userroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, name); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|  | ||||
| @ -8,7 +8,7 @@ | ||||
| @inject IStringLocalizer<SharedResources> SharedLocalizer | ||||
| @inject SiteState SiteState | ||||
|  | ||||
| @if (userroles == null) | ||||
| @if (users == null) | ||||
| { | ||||
|     <p> | ||||
|         <em>@SharedLocalizer["Loading"]</em> | ||||
| @ -31,7 +31,7 @@ else | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 			<Pager Items="@userroles" RowClass="align-middle"> | ||||
| 			<Pager Items="@users" RowClass="align-middle"> | ||||
| 				<Header> | ||||
| 				<th style="width: 1px;"> </th> | ||||
| 				<th style="width: 1px;"> </th> | ||||
| @ -350,9 +350,9 @@ else | ||||
| } | ||||
|  | ||||
| @code { | ||||
| 	private List<UserRole> allroles; | ||||
| 	private List<UserRole> userroles; | ||||
| 	private string _search; | ||||
| 	private List<UserRole> allusers; | ||||
| 	private List<UserRole> users; | ||||
| 	private string _search = ""; | ||||
|  | ||||
| 	private string _allowregistration; | ||||
| 	private string _allowsitelogin; | ||||
| @ -399,9 +399,8 @@ else | ||||
|  | ||||
| 	protected override async Task OnInitializedAsync() | ||||
| 	{ | ||||
| 		allroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); | ||||
| 		await LoadSettingsAsync(); | ||||
| 		userroles = Search(_search); | ||||
| 		await LoadUserSettingsAsync(); | ||||
| 		await LoadUsersAsync(true); | ||||
|  | ||||
| 		var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId); | ||||
| 		_allowregistration = PageState.Site.AllowRegistration.ToString(); | ||||
| @ -447,27 +446,36 @@ else | ||||
| 			_lifetime = SettingService.GetSetting(settings, "JwtOptions:Lifetime", "20");		} | ||||
| 	} | ||||
|  | ||||
| 	private List<UserRole> Search(string search) | ||||
| 	private async Task LoadUsersAsync(bool load) | ||||
| 	{ | ||||
| 		var results = allroles.Where(item => item.Role.Name == RoleNames.Registered || (item.Role.Name == RoleNames.Host && UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))); | ||||
| 		if (load) | ||||
| 		{ | ||||
| 			allusers = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, RoleNames.Registered); | ||||
| 			if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) | ||||
| 			{ | ||||
| 				var hosts = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, RoleNames.Host); | ||||
| 				allusers.AddRange(hosts); | ||||
| 				allusers = allusers.OrderBy(u => u.User.DisplayName).ToList(); | ||||
| 			}			 | ||||
| 		} | ||||
|  | ||||
| 		users = allusers; | ||||
| 		if (!string.IsNullOrEmpty(_search)) | ||||
| 		{ | ||||
| 			results = results.Where(item => | ||||
| 			users = users.Where(item => | ||||
| 				( | ||||
| 					item.User.Username.Contains(search, StringComparison.OrdinalIgnoreCase) || | ||||
| 					item.User.Email.Contains(search, StringComparison.OrdinalIgnoreCase) || | ||||
| 					item.User.DisplayName.Contains(search, StringComparison.OrdinalIgnoreCase) | ||||
| 					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() | ||||
| 	{ | ||||
| 		userroles = Search(_search); | ||||
| 		await UpdateSettingsAsync(); | ||||
| 		await UpdateUserSettingsAsync(); | ||||
| 		await LoadUsersAsync(false); | ||||
| 	} | ||||
|  | ||||
| 	private async Task DeleteUser(UserRole UserRole) | ||||
| @ -479,8 +487,7 @@ else | ||||
| 			{ | ||||
| 				await UserService.DeleteUserAsync(user.UserId, PageState.Site.SiteId); | ||||
| 				await logger.LogInformation("User Deleted {User}", UserRole.User); | ||||
| 				allroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); | ||||
| 				userroles = Search(_search); | ||||
| 				await LoadUsersAsync(true); | ||||
| 				StateHasChanged(); | ||||
| 			} | ||||
| 		} | ||||
| @ -493,13 +500,13 @@ else | ||||
|  | ||||
| 	private string settingSearch = "AU-search"; | ||||
|  | ||||
| 	private async Task LoadSettingsAsync() | ||||
| 	private async Task LoadUserSettingsAsync() | ||||
| 	{ | ||||
| 		Dictionary<string, string> settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); | ||||
| 		_search = SettingService.GetSetting(settings, settingSearch, ""); | ||||
| 	} | ||||
|  | ||||
| 	private async Task UpdateSettingsAsync() | ||||
| 	private async Task UpdateUserSettingsAsync() | ||||
| 	{ | ||||
| 		Dictionary<string, string> settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); | ||||
| 		SettingService.SetSetting(settings, settingSearch, _search); | ||||
|  | ||||
| @ -110,8 +110,7 @@ else | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             userroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); | ||||
|             userroles = userroles.Where(item => item.UserId == userid).ToList(); | ||||
|             userroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, userid); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker