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