namespace HyperBooru.Services; public interface IPrincipalProvider { public IPrincipal? GetPrincipal(string name); public IUser? GetUser(string name); public IGroup? GetGroup(string name); public IGroup[] GetGroups(IPrincipal principal); public IGroup[] GetGroups(IPrincipal principal, bool recurse); public bool ValidatePassword(IUser user, string password); } public abstract class PrincipalProvider : IPrincipalProvider { public abstract IPrincipal? GetPrincipal(string name); public abstract IUser? GetUser(string name); public abstract IGroup? GetGroup(string name); public IGroup[] GetGroups(IPrincipal principal) => GetGroups(principal, false); public abstract IGroup[] GetGroups(IPrincipal principal, bool recurse); public abstract bool ValidatePassword(IUser user, string password); }