diff options
| author | Jake Mannens <jake@asger.xyz> | 2023-09-29 05:01:45 +1000 |
|---|---|---|
| committer | Jake Mannens <jake@asger.xyz> | 2023-09-29 05:33:04 +1000 |
| commit | 76e4bf609c3d196bd20619188a317fca66f4a04a (patch) | |
| tree | 8d6544efc82782f2417f39f31fd05aa76e68316e /Services | |
| parent | bedcb6b176130fc2c6bd4657c8af4d407b64c970 (diff) | |
Separated Principal and LocalPrincipal types
Diffstat (limited to 'Services')
| -rw-r--r-- | Services/PrincipalProvider.cs | 22 | ||||
| -rw-r--r-- | Services/SecurityService.cs | 14 |
2 files changed, 25 insertions, 11 deletions
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<HBContext> dbFactory; - private MemoryCache<SidStruct, HBPrincipal> principalCache; - private MemoryCache<int, Acl> aclCache; + private MemoryCache<SidStruct, Principal> principalCache; + private MemoryCache<int, Acl> aclCache; public SecurityService(IDbContextFactory<HBContext> dbFactory) { this.dbFactory = dbFactory; @@ -39,7 +39,7 @@ public class SecurityService { public IEnumerable<HBObject> Filter( IEnumerable<HBObject> objects, - HBPrincipal principal, + Principal principal, ulong permissions) { foreach(var obj in objects) { @@ -51,7 +51,7 @@ public class SecurityService { public IEnumerable<HBObject> Filter<T>( IEnumerable<HBObject> objects, - HBPrincipal principal, + Principal principal, T permissions) where T : Enum => Filter(objects, principal, permissions); @@ -62,14 +62,14 @@ public class SecurityService { /// <param name="acl"> /// ACL to resolve (returns a bitmask consisting of all 1's if this field is null) /// </param> - 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<HBPrincipal>() + .Cast<Principal>() .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. /// </summary> - private List<Group> GetGroupMemberShip(HBPrincipal principal) { + private List<Group> GetGroupMemberShip(Principal principal) { var groups = principal.MemberOf.ToList(); while(true) { |
