From 76e4bf609c3d196bd20619188a317fca66f4a04a Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Fri, 29 Sep 2023 05:01:45 +1000 Subject: Separated Principal and LocalPrincipal types --- Services/PrincipalProvider.cs | 22 ++++++++++++++++++---- Services/SecurityService.cs | 14 +++++++------- 2 files changed, 25 insertions(+), 11 deletions(-) (limited to 'Services') diff --git a/Services/PrincipalProvider.cs b/Services/PrincipalProvider.cs index e75c6c7..6991c64 100644 --- a/Services/PrincipalProvider.cs +++ b/Services/PrincipalProvider.cs @@ -1,9 +1,23 @@ namespace HyperBooru.Services; -public abstract class PrincipalProvider { - public abstract bool ValidatePassword(HBPrincipal principal, string password); +public interface IPrincipalProvider { + public Principal? GetPrincipal(string name); + public User? GetUser(string name); + public Group? GetGroup(string name); - public abstract HBPrincipal GetPrincipal(string username); + public Group[] GetGroups(Principal principal); + public Group[] GetGroups(Principal principal, bool recurse); - public abstract Group[] GetAllGroups(HBPrincipal principal); + public bool ValidatePassword(User user, string password); +} + +public abstract class PrincipalProvider : IPrincipalProvider { + public abstract Principal? GetPrincipal(string name); + public abstract User? GetUser(string name); + public abstract Group? GetGroup(string name); + + public Group[] GetGroups(Principal principal) => GetGroups(principal, false); + public abstract Group[] GetGroups(Principal principal, bool recurse); + + public abstract bool ValidatePassword(User user, string password); } diff --git a/Services/SecurityService.cs b/Services/SecurityService.cs index f1444c1..8c97c7b 100644 --- a/Services/SecurityService.cs +++ b/Services/SecurityService.cs @@ -7,8 +7,8 @@ namespace HyperBooru.Services; public class SecurityService { private IDbContextFactory dbFactory; - private MemoryCache principalCache; - private MemoryCache aclCache; + private MemoryCache principalCache; + private MemoryCache aclCache; public SecurityService(IDbContextFactory dbFactory) { this.dbFactory = dbFactory; @@ -39,7 +39,7 @@ public class SecurityService { public IEnumerable Filter( IEnumerable objects, - HBPrincipal principal, + Principal principal, ulong permissions) { foreach(var obj in objects) { @@ -51,7 +51,7 @@ public class SecurityService { public IEnumerable Filter( IEnumerable objects, - HBPrincipal principal, + Principal principal, T permissions) where T : Enum => Filter(objects, principal, permissions); @@ -62,14 +62,14 @@ public class SecurityService { /// /// ACL to resolve (returns a bitmask consisting of all 1's if this field is null) /// - private ulong GetPermissions(Acl? acl, HBPrincipal principal) { + private ulong GetPermissions(Acl? acl, Principal principal) { if(acl is null) return ulong.MaxValue; ulong permissions = 0; var principals = GetGroupMemberShip(principal) - .Cast() + .Cast() .Concat(new[] { principal }) .Select(p => p.Sid) .ToArray(); @@ -96,7 +96,7 @@ public class SecurityService { /// Recursively get all groups of which the specified principal /// is a member, including implicit memberships. /// - private List GetGroupMemberShip(HBPrincipal principal) { + private List GetGroupMemberShip(Principal principal) { var groups = principal.MemberOf.ToList(); while(true) { -- cgit v1.3