Took Database layout changes into account in frontend pages

This commit is contained in:
2024-09-28 12:17:07 +02:00
parent f71587d72e
commit cfda1bd053
10 changed files with 29 additions and 20 deletions

View File

@@ -7,6 +7,8 @@ public interface IGroupRepository {
Task<IList<PermissionGroup>> GetDefaultGroups(); Task<IList<PermissionGroup>> GetDefaultGroups();
Task<IList<PermissionGroup>> GetUserGroups(User user);
Task<PermissionGroup> GetPermissionGroup(string name); Task<PermissionGroup> GetPermissionGroup(string name);
Task EditPermissionGroup(PermissionGroup group); Task EditPermissionGroup(PermissionGroup group);

View File

@@ -13,11 +13,6 @@ public interface IUserRepository {
Task<User> AddUser(User user); Task<User> AddUser(User user);
/// <summary>
/// IMPORTANT:<br/>
/// This function does not add or remove any permissions to the user.
/// For that please use <see cref="IPermissionRepository"/>
/// </summary>
Task UpdateUser(User user); Task UpdateUser(User user);
Task DeleteUser(User user); Task DeleteUser(User user);

View File

@@ -17,6 +17,14 @@ internal sealed class GroupRepository<TDbContext>(TDbContext context) : IGroupRe
.ToListAsync(); .ToListAsync();
} }
public Task<IList<PermissionGroup>> GetUserGroups(User user) {
return Task.FromResult((IList<PermissionGroup>) context.Groups
.Include(g => g.Permissions)
.AsEnumerable()
.Where(g => user.Permissions.Any(p => p.PermissionName == g.Name))
.ToList());
}
public async Task<PermissionGroup> GetPermissionGroup(string name) { public async Task<PermissionGroup> GetPermissionGroup(string name) {
return await context.Groups return await context.Groups
.Include(g => g.Permissions) .Include(g => g.Permissions)

View File

@@ -11,7 +11,6 @@ internal sealed class UserRepository<TDbContext>(TDbContext context, IGroupRepos
private IIncludableQueryable<User, IList<Token>> IncludeReferences() { private IIncludableQueryable<User, IList<Token>> IncludeReferences() {
return context.Users return context.Users
.Include(u => u.Permissions) .Include(u => u.Permissions)
.ThenInclude(p => p.Group)
.Include(u => u.Tokens); .Include(u => u.Tokens);
} }
@@ -47,7 +46,7 @@ internal sealed class UserRepository<TDbContext>(TDbContext context, IGroupRepos
Email = user.Email, Email = user.Email,
Username = user.Username, Username = user.Username,
CreatedAt = DateTime.Now, CreatedAt = DateTime.Now,
Permissions = user.Permissions, Permissions = user.Permissions ?? new List<Permission>(),
Tokens = user.Tokens Tokens = user.Tokens
}; };
entry.Password = EncryptionManager.Hash(user.Password, Encoding.Default.GetBytes(entry.CreatedAt.ToString(CultureInfo.InvariantCulture))); entry.Password = EncryptionManager.Hash(user.Password, Encoding.Default.GetBytes(entry.CreatedAt.ToString(CultureInfo.InvariantCulture)));
@@ -56,13 +55,11 @@ internal sealed class UserRepository<TDbContext>(TDbContext context, IGroupRepos
foreach (var group in defaultGroups) { foreach (var group in defaultGroups) {
entry.Permissions.Add(new Permission { entry.Permissions.Add(new Permission {
PermissionName = group.Name, PermissionName = group.Name,
//TODO: Check if user needs to be set GrantedAt = DateTime.Now
}); });
} }
await context.Users.AddAsync(entry); await context.Users.AddAsync(entry);
await context.SaveChangesAsync(); await context.SaveChangesAsync();
return entry; return entry;
} }

View File

@@ -177,7 +177,8 @@
} }
_group.Permissions.Add(new Permission { _group.Permissions.Add(new Permission {
PermissionName = _permissionToAdd PermissionName = _permissionToAdd,
GrantedAt = DateTime.Now
}); });
_permissionToAdd = null; _permissionToAdd = null;
@@ -255,7 +256,12 @@
return; 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) if (ReloadPage is not null)
await ReloadPage.Invoke(); await ReloadPage.Invoke();

View File

@@ -57,7 +57,7 @@
<option selected>Select group</option> <option selected>Select group</option>
@foreach (var group in _allGroups) { @foreach (var group in _allGroups) {
@if (_userGroups.All(g => g.Name != group.Name)) { @if (_userGroups?.All(g => g.Name != group.Name) == true) {
<option value="@group.Name">@group.Name.Replace("group.", "")</option> <option value="@group.Name">@group.Name.Replace("group.", "")</option>
} }
} }
@@ -125,7 +125,7 @@
} }
_user = user; _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(); _allGroups = await Groups.GetPermissionGroups();
await _modal.ShowAsync(); await _modal.ShowAsync();
} }

View File

@@ -6,7 +6,7 @@
.field-wrapper { .field-wrapper {
margin-top: 25vh; margin-top: 25vh;
min-width: 30vw; min-width: 500px;
padding: 30px; padding: 30px;
border: 2px solid #ced4da; border: 2px solid #ced4da;

View File

@@ -20,7 +20,7 @@
<BSNavbarToggle/> <BSNavbarToggle/>
</Toggler> </Toggler>
<Content> <Content>
<BSNav MarginEnd="Margins.Auto" MarginBottom="Margins.Small" Class="mb-lg-0"> <BSNav MarginEnd="Margins.Auto" Class="mb-lg-0">
<BSNavItem IsActive="IsDashboardActive()" OnClick="NavigateToDashboard">Dashboard</BSNavItem> <BSNavItem IsActive="IsDashboardActive()" OnClick="NavigateToDashboard">Dashboard</BSNavItem>
@foreach (var nav in Subpages) { @foreach (var nav in Subpages) {

View File

@@ -97,6 +97,7 @@
@inject IUserRepository UserService @inject IUserRepository UserService
@inject IPermissionRepository PermissionsService @inject IPermissionRepository PermissionsService
@inject IGroupRepository Groups
@inject SweetAlertService Alerts @inject SweetAlertService Alerts
@inject ITokenContext Auth @inject ITokenContext Auth
@@ -119,7 +120,7 @@
_users = await UserService.GetUsers(); _users = await UserService.GetUsers();
foreach (var user in _users) { 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()); _userGroups.Add(user.Id, groups.LastOrDefault());
} }
@@ -134,7 +135,7 @@
_users = await UserService.GetUsers(); _users = await UserService.GetUsers();
foreach (var user in _users) { 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()); _userGroups.Add(user.Id, groups.LastOrDefault());
} }