Added Admin pages

This commit is contained in:
2024-07-21 15:08:29 +02:00
parent 7cd412b168
commit f8ee78f1fd
18 changed files with 626 additions and 11 deletions

View File

@@ -3,14 +3,16 @@ namespace HopFrame.Security.Authorization;
public static class PermissionValidator {
public static bool IncludesPermission(string permission, string[] permissions) {
if (permission == "*") return true;
if (permissions.Contains(permission)) return true;
var permLow = permission.ToLower();
var permsLow = permissions.Select(perm => perm.ToLower()).ToArray();
foreach (var perm in permissions) {
if (permsLow.Any(perm => perm == permLow || perm == "*")) return true;
foreach (var perm in permsLow) {
if (!perm.EndsWith(".*")) continue;
var permissionGroup = perm.Replace(".*", "");
if (permission.StartsWith(permissionGroup)) return true;
if (permLow.StartsWith(permissionGroup)) return true;
}
return false;

View File

@@ -6,8 +6,12 @@ public interface IPermissionService {
Task<bool> HasPermission(string permission, Guid user);
Task<IList<PermissionGroup>> GetPermissionGroups();
Task<PermissionGroup> GetPermissionGroup(string name);
Task<IList<PermissionGroup>> GetUserPermissionGroups(User user);
Task CreatePermissionGroup(string name, bool isDefault = false, string description = null);
Task DeletePermissionGroup(PermissionGroup group);

View File

@@ -40,6 +40,12 @@ internal sealed class PermissionService<TDbContext>(TDbContext context, ITokenCo
return PermissionValidator.IncludesPermission(permission, permissions);
}
public async Task<IList<PermissionGroup>> GetPermissionGroups() {
return await context.Groups
.Select(group => group.ToPermissionGroup(context))
.ToListAsync();
}
public Task<PermissionGroup> GetPermissionGroup(string name) {
return context.Groups
.Where(group => group.Name == name)
@@ -47,6 +53,16 @@ internal sealed class PermissionService<TDbContext>(TDbContext context, ITokenCo
.SingleOrDefaultAsync();
}
public async Task<IList<PermissionGroup>> GetUserPermissionGroups(User user) {
var groups = await context.Groups.ToListAsync();
var perms = await GetFullPermissions(user.Id.ToString());
return groups
.Where(group => PermissionValidator.IncludesPermission(group.Name, perms))
.Select(group => group.ToPermissionGroup(context))
.ToList();
}
public async Task CreatePermissionGroup(string name, bool isDefault = false, string description = null) {
var group = new GroupEntry {
Name = name,