From cfda1bd053818a1285c1e65c00c2232dac8adc84 Mon Sep 17 00:00:00 2001 From: Leon Hoppe Date: Sat, 28 Sep 2024 12:17:07 +0200 Subject: [PATCH] Took Database layout changes into account in frontend pages --- src/HopFrame.Database/Repositories/IGroupRepository.cs | 2 ++ src/HopFrame.Database/Repositories/IUserRepository.cs | 7 +------ .../Repositories/Implementation/GroupRepository.cs | 8 ++++++++ .../Repositories/Implementation/UserRepository.cs | 7 ++----- .../Components/Administration/GroupAddModal.razor | 10 ++++++++-- .../Components/Administration/UserEditModal.razor | 4 ++-- src/HopFrame.Web/Pages/Administration/AdminLogin.razor | 2 +- .../Pages/Administration/AdminLogin.razor.css | 2 +- .../Pages/Administration/Layout/AdminMenu.razor | 2 +- src/HopFrame.Web/Pages/Administration/UsersPage.razor | 5 +++-- 10 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/HopFrame.Database/Repositories/IGroupRepository.cs b/src/HopFrame.Database/Repositories/IGroupRepository.cs index fde75de..259d7c5 100644 --- a/src/HopFrame.Database/Repositories/IGroupRepository.cs +++ b/src/HopFrame.Database/Repositories/IGroupRepository.cs @@ -7,6 +7,8 @@ public interface IGroupRepository { Task> GetDefaultGroups(); + Task> GetUserGroups(User user); + Task GetPermissionGroup(string name); Task EditPermissionGroup(PermissionGroup group); diff --git a/src/HopFrame.Database/Repositories/IUserRepository.cs b/src/HopFrame.Database/Repositories/IUserRepository.cs index e24fd57..e847d61 100644 --- a/src/HopFrame.Database/Repositories/IUserRepository.cs +++ b/src/HopFrame.Database/Repositories/IUserRepository.cs @@ -12,12 +12,7 @@ public interface IUserRepository { Task GetUserByUsername(string username); Task AddUser(User user); - - /// - /// IMPORTANT:
- /// This function does not add or remove any permissions to the user. - /// For that please use - ///
+ Task UpdateUser(User user); Task DeleteUser(User user); diff --git a/src/HopFrame.Database/Repositories/Implementation/GroupRepository.cs b/src/HopFrame.Database/Repositories/Implementation/GroupRepository.cs index 3906b1b..547e193 100644 --- a/src/HopFrame.Database/Repositories/Implementation/GroupRepository.cs +++ b/src/HopFrame.Database/Repositories/Implementation/GroupRepository.cs @@ -17,6 +17,14 @@ internal sealed class GroupRepository(TDbContext context) : IGroupRe .ToListAsync(); } + public Task> GetUserGroups(User user) { + return Task.FromResult((IList) context.Groups + .Include(g => g.Permissions) + .AsEnumerable() + .Where(g => user.Permissions.Any(p => p.PermissionName == g.Name)) + .ToList()); + } + public async Task GetPermissionGroup(string name) { return await context.Groups .Include(g => g.Permissions) diff --git a/src/HopFrame.Database/Repositories/Implementation/UserRepository.cs b/src/HopFrame.Database/Repositories/Implementation/UserRepository.cs index 9c8e322..c642466 100644 --- a/src/HopFrame.Database/Repositories/Implementation/UserRepository.cs +++ b/src/HopFrame.Database/Repositories/Implementation/UserRepository.cs @@ -11,7 +11,6 @@ internal sealed class UserRepository(TDbContext context, IGroupRepos private IIncludableQueryable> IncludeReferences() { return context.Users .Include(u => u.Permissions) - .ThenInclude(p => p.Group) .Include(u => u.Tokens); } @@ -47,7 +46,7 @@ internal sealed class UserRepository(TDbContext context, IGroupRepos Email = user.Email, Username = user.Username, CreatedAt = DateTime.Now, - Permissions = user.Permissions, + Permissions = user.Permissions ?? new List(), Tokens = user.Tokens }; entry.Password = EncryptionManager.Hash(user.Password, Encoding.Default.GetBytes(entry.CreatedAt.ToString(CultureInfo.InvariantCulture))); @@ -56,13 +55,11 @@ internal sealed class UserRepository(TDbContext context, IGroupRepos foreach (var group in defaultGroups) { entry.Permissions.Add(new Permission { PermissionName = group.Name, - //TODO: Check if user needs to be set + GrantedAt = DateTime.Now }); } await context.Users.AddAsync(entry); - - await context.SaveChangesAsync(); return entry; } diff --git a/src/HopFrame.Web/Components/Administration/GroupAddModal.razor b/src/HopFrame.Web/Components/Administration/GroupAddModal.razor index b23c216..8f432e7 100644 --- a/src/HopFrame.Web/Components/Administration/GroupAddModal.razor +++ b/src/HopFrame.Web/Components/Administration/GroupAddModal.razor @@ -177,7 +177,8 @@ } _group.Permissions.Add(new Permission { - PermissionName = _permissionToAdd + PermissionName = _permissionToAdd, + GrantedAt = DateTime.Now }); _permissionToAdd = null; @@ -255,7 +256,12 @@ return; } - await Groups.CreatePermissionGroup(_group); + await Groups.CreatePermissionGroup(new PermissionGroup { + Description = _group.Description, + IsDefaultGroup = _group.IsDefaultGroup, + Permissions = _group.Permissions, + Name = "group." + _group.GroupName + }); if (ReloadPage is not null) await ReloadPage.Invoke(); diff --git a/src/HopFrame.Web/Components/Administration/UserEditModal.razor b/src/HopFrame.Web/Components/Administration/UserEditModal.razor index ef0efa6..f4bbe36 100644 --- a/src/HopFrame.Web/Components/Administration/UserEditModal.razor +++ b/src/HopFrame.Web/Components/Administration/UserEditModal.razor @@ -57,7 +57,7 @@ @foreach (var group in _allGroups) { - @if (_userGroups.All(g => g.Name != group.Name)) { + @if (_userGroups?.All(g => g.Name != group.Name) == true) { } } @@ -125,7 +125,7 @@ } _user = user; - _userGroups = _user.Permissions.Where(p => p.PermissionName.StartsWith("group.")).Select(p => p.Group).ToList(); + _userGroups = await Groups.GetUserGroups(user); _allGroups = await Groups.GetPermissionGroups(); await _modal.ShowAsync(); } diff --git a/src/HopFrame.Web/Pages/Administration/AdminLogin.razor b/src/HopFrame.Web/Pages/Administration/AdminLogin.razor index f6d8c68..c346c23 100644 --- a/src/HopFrame.Web/Pages/Administration/AdminLogin.razor +++ b/src/HopFrame.Web/Pages/Administration/AdminLogin.razor @@ -61,7 +61,7 @@ _hasError = true; return; } - + Navigator.NavigateTo(string.IsNullOrEmpty(RedirectAfter) ? DefaultRedirect : RedirectAfter, true); } } \ No newline at end of file diff --git a/src/HopFrame.Web/Pages/Administration/AdminLogin.razor.css b/src/HopFrame.Web/Pages/Administration/AdminLogin.razor.css index b92aa21..26ceacc 100644 --- a/src/HopFrame.Web/Pages/Administration/AdminLogin.razor.css +++ b/src/HopFrame.Web/Pages/Administration/AdminLogin.razor.css @@ -6,7 +6,7 @@ .field-wrapper { margin-top: 25vh; - min-width: 30vw; + min-width: 500px; padding: 30px; border: 2px solid #ced4da; diff --git a/src/HopFrame.Web/Pages/Administration/Layout/AdminMenu.razor b/src/HopFrame.Web/Pages/Administration/Layout/AdminMenu.razor index 233cf52..a66f311 100644 --- a/src/HopFrame.Web/Pages/Administration/Layout/AdminMenu.razor +++ b/src/HopFrame.Web/Pages/Administration/Layout/AdminMenu.razor @@ -20,7 +20,7 @@ - + Dashboard @foreach (var nav in Subpages) { diff --git a/src/HopFrame.Web/Pages/Administration/UsersPage.razor b/src/HopFrame.Web/Pages/Administration/UsersPage.razor index 7d36ce4..47b871c 100644 --- a/src/HopFrame.Web/Pages/Administration/UsersPage.razor +++ b/src/HopFrame.Web/Pages/Administration/UsersPage.razor @@ -97,6 +97,7 @@ @inject IUserRepository UserService @inject IPermissionRepository PermissionsService +@inject IGroupRepository Groups @inject SweetAlertService Alerts @inject ITokenContext Auth @@ -119,7 +120,7 @@ _users = await UserService.GetUsers(); foreach (var user in _users) { - var groups = user.Permissions.Where(p => p.PermissionName.StartsWith("group.")).Select(p => p.Group).ToList(); + var groups = await Groups.GetUserGroups(user); _userGroups.Add(user.Id, groups.LastOrDefault()); } @@ -134,7 +135,7 @@ _users = await UserService.GetUsers(); foreach (var user in _users) { - var groups = user.Permissions.Where(p => p.PermissionName.StartsWith("group.")).Select(p => p.Group).ToList(); + var groups = await Groups.GetUserGroups(user); _userGroups.Add(user.Id, groups.LastOrDefault()); }