@namespace Oqtane.Modules.Admin.Roles @inherits ModuleBase @inject IRoleService RoleService @inject IUserRoleService UserRoleService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @if (userroles == null) {

@SharedLocalizer["Loading"]

} else {


@SharedLocalizer["Cancel"]

@Localizer["Users"] @SharedLocalizer["Username"] @Localizer["Effective"] @Localizer["Expiry"]  
@context.User.DisplayName @context.User.Username @context.EffectiveDate @context.ExpiryDate

} @code { private ElementReference form; private bool validated = false; private int roleid; private string name = string.Empty; private AutoComplete user; private DateTime? effectivedate = null; private DateTime? expirydate = null; private List userroles; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Edit; protected override async Task OnInitializedAsync() { try { roleid = Int32.Parse(PageState.QueryString["id"]); Role role = await RoleService.GetRoleAsync(roleid); name = role.Name; await GetUserRoles(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Users {Error}", ex.Message); AddModuleMessage(Localizer["Error.User.Load"], MessageType.Error); } } private async Task> GetUsers(string filter) { try { var users = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, RoleNames.Registered); return users.Where(item => item.User.DisplayName.Contains(filter, StringComparison.OrdinalIgnoreCase)) .ToDictionary(item => item.UserId.ToString(), item => item.User.DisplayName); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Users {filter} {Error}", filter, ex.Message); AddModuleMessage(Localizer["Error.User.Load"], MessageType.Error); } return new Dictionary(); } private async Task GetUserRoles() { try { userroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, name); } catch (Exception ex) { await logger.LogError(ex, "Error Loading User Roles {RoleId} {Error}", roleid, ex.Message); AddModuleMessage(Localizer["Error.User.LoadRole"], MessageType.Error); } } private async Task SaveUserRole() { validated = true; var interop = new Interop(JSRuntime); if (await interop.FormValid(form)) { try { if (!string.IsNullOrEmpty(user.Key) && int.TryParse(user.Key, out int userid)) { var userrole = userroles.Where(item => item.UserId == userid && item.RoleId == roleid).FirstOrDefault(); if (userrole != null) { userrole.EffectiveDate = effectivedate; userrole.ExpiryDate = expirydate; await UserRoleService.UpdateUserRoleAsync(userrole); } else { userrole = new UserRole(); userrole.UserId = userid; userrole.RoleId = roleid; userrole.EffectiveDate = effectivedate; userrole.ExpiryDate = expirydate; await UserRoleService.AddUserRoleAsync(userrole); } await logger.LogInformation("User Assigned To Role {UserRole}", userrole); AddModuleMessage(Localizer["Success.User.AssignedRole"], MessageType.Success); await GetUserRoles(); user.Clear(); StateHasChanged(); } else { AddModuleMessage(Localizer["Message.Required.UserSelect"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving User Roles {RoleId} {Error}", roleid, ex.Message); AddModuleMessage(Localizer["Error.User.SaveRole"], MessageType.Error); } } else { AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); } } private async Task DeleteUserRole(int UserRoleId) { try { var userrole = await UserRoleService.GetUserRoleAsync(UserRoleId); if (userrole.Role.Name == RoleNames.Registered) { userrole.ExpiryDate = DateTime.UtcNow; await UserRoleService.UpdateUserRoleAsync(userrole); await logger.LogInformation("User {Username} Expired From Role {Role}", userrole.User.Username, userrole.Role.Name); } else { await UserRoleService.DeleteUserRoleAsync(UserRoleId); await logger.LogInformation("User {Username} Removed From Role {Role}", userrole.User.Username, userrole.Role.Name); } AddModuleMessage(Localizer["Confirm.User.RoleRemoved"], MessageType.Success); await GetUserRoles(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Removing User From Role {UserRoleId} {Error}", UserRoleId, ex.Message); AddModuleMessage(Localizer["Error.User.RemoveRole"], MessageType.Error); } } }