@rendermode InteractiveServer @using BlazorStrap @using BlazorStrap.Shared.Components.Modal @using static Microsoft.AspNetCore.Components.Web.RenderMode @using BlazorStrap.V5 @using CurrieTechnologies.Razor.SweetAlert2 @using HopFrame.Database.Models @using HopFrame.Security.Claims @using HopFrame.Security.Services @using HopFrame.Web.Model @using HopFrame.Web.Services Edit @_user.Username
User id
Created at
E-Mail
Username
Password
Groups @foreach (var group in _userGroups) { @group.Name.Replace("group.", "") }
@foreach (var group in _allGroups) { @if (_userGroups.All(g => g.Name != group.Name)) { } } Add
Permissions @foreach (var perm in _user.Permissions.Where(perm => !perm.PermissionName.StartsWith("group."))) { @perm.PermissionName }
Add
Cancel Save
@inject IUserService Users @inject IPermissionService Permissions @inject SweetAlertService Alerts @inject ITokenContext Auth @code { [Parameter] public Func ReloadPage { get; set; } private BSModalBase _modal; private User _user; private string _newPassword; private IList _userGroups; private IList _allGroups; private string _selectedGroup; private string _permissionToAdd; public async Task ShowAsync(User user) { if (!(await Permissions.HasPermission(AdminPermissions.EditUsers, Auth.User.Id))) { await NoEditPermissions(); return; } _user = user; _userGroups = await Permissions.GetUserPermissionGroups(_user); _allGroups = await Permissions.GetPermissionGroups(); await _modal.ShowAsync(); } private async Task AddGroup() { if (!(await Permissions.HasPermission(AdminPermissions.EditUsers, Auth.User.Id))) { await NoEditPermissions(); return; } if (string.IsNullOrWhiteSpace(_selectedGroup)) { await Alerts.FireAsync(new SweetAlertOptions { Title = "Select a group!", Icon = SweetAlertIcon.Error, ShowConfirmButton = true }); return; } var group = _allGroups.SingleOrDefault(group => group.Name == _selectedGroup); await Permissions.AddPermission(_user, group?.Name); _userGroups.Add(group); await Alerts.FireAsync(new SweetAlertOptions { Title = "Group added!", Icon = SweetAlertIcon.Success, Timer = 1500, ShowConfirmButton = false }); } private async Task RemoveGroup(PermissionGroup group) { if (!(await Permissions.HasPermission(AdminPermissions.EditUsers, Auth.User.Id))) { await NoEditPermissions(); return; } var result = await Alerts.FireAsync(new SweetAlertOptions { Title = "Are you sure?", Icon = SweetAlertIcon.Warning, ConfirmButtonText = "Yes", ShowCancelButton = true, ShowConfirmButton = true }); if (result.IsConfirmed) { await Permissions.RemoveGroupFromUser(_user, group); _userGroups.Remove(group); StateHasChanged(); await Alerts.FireAsync(new SweetAlertOptions { Title = "Group removed!", Icon = SweetAlertIcon.Success, Timer = 1500, ShowConfirmButton = false }); } } private async Task AddPermission() { if (!(await Permissions.HasPermission(AdminPermissions.EditUsers, Auth.User.Id))) { await NoEditPermissions(); return; } if (string.IsNullOrWhiteSpace(_permissionToAdd)) { await Alerts.FireAsync(new SweetAlertOptions { Title = "Enter a permission name!", Icon = SweetAlertIcon.Error, ShowConfirmButton = true }); return; } await Permissions.AddPermission(_user, _permissionToAdd); _user.Permissions.Add(await Permissions.GetPermission(_permissionToAdd, _user)); _permissionToAdd = ""; await Alerts.FireAsync(new SweetAlertOptions { Title = "Permission added!", Icon = SweetAlertIcon.Success, Timer = 1500, ShowConfirmButton = false }); } private async Task RemovePermission(Permission perm) { if (!(await Permissions.HasPermission(AdminPermissions.EditUsers, Auth.User.Id))) { await NoEditPermissions(); return; } var result = await Alerts.FireAsync(new SweetAlertOptions { Title = "Are you sure?", Icon = SweetAlertIcon.Warning, ConfirmButtonText = "Yes", ShowCancelButton = true, ShowConfirmButton = true }); if (result.IsConfirmed) { await Permissions.RemovePermission(perm); _user.Permissions.Remove(perm); StateHasChanged(); await Alerts.FireAsync(new SweetAlertOptions { Title = "Permission removed!", Icon = SweetAlertIcon.Success, Timer = 1500, ShowConfirmButton = false }); } } private async void EditUser() { if (!(await Permissions.HasPermission(AdminPermissions.EditUsers, Auth.User.Id))) { await NoEditPermissions(); return; } string errorMessage = null; var validator = new RegisterData { Password = _newPassword, Email = _user.Email }; var allUsers = await Users.GetUsers(); if (allUsers.Any(user => user.Username == _user.Username && user.Id != _user.Id)) { errorMessage = "Username is already taken!"; } else if (allUsers.Any(user => user.Email == _user.Email && user.Id != _user.Id)) { errorMessage = "E-Mail is already taken!"; } else if (!string.IsNullOrWhiteSpace(_newPassword) && !validator.PasswordIsValid) { errorMessage = "The password needs to be at least 8 characters long!"; } else if (!validator.EmailIsValid) { errorMessage = "Invalid E-Mail address!"; } if (!string.IsNullOrWhiteSpace(errorMessage)) { await Alerts.FireAsync(new SweetAlertOptions { Title = "Something went wrong!", Text = errorMessage, Icon = SweetAlertIcon.Error, ShowConfirmButton = false, Timer = 1500 }); return; } await Users.UpdateUser(_user); if (!string.IsNullOrWhiteSpace(_newPassword)) { await Users.ChangePassword(_user, _newPassword); } if (ReloadPage is not null) await ReloadPage.Invoke(); await Alerts.FireAsync(new SweetAlertOptions { Title = "User edited!", Icon = SweetAlertIcon.Success, Timer = 1500, ShowConfirmButton = false }); } private async Task NoEditPermissions() { await Alerts.FireAsync(new SweetAlertOptions { Title = "Unauthorized!", Text = "You don't have the required Permissions to edit a user!", Icon = SweetAlertIcon.Error }); } }