From cb8179b5e5a8d5253d063ed607205f52643410fa Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Mon, 18 Sep 2023 19:34:14 +1000 Subject: Initial commit --- Acl.cs | 35 +++++++++++++++++++++++++++++++++++ HBContext.cs | 8 +++++++- HBObject.cs | 1 + Pages/Component/Titlebar.razor | 17 +++++++---------- Principal.cs | 16 ++++++++++++++++ Services/SecurityService.cs | 29 +++++++++++++++++++++++++++++ User.cs | 9 --------- wwwroot/js/keyboard.js | 2 ++ 8 files changed, 97 insertions(+), 20 deletions(-) create mode 100644 Acl.cs create mode 100644 Principal.cs create mode 100644 Services/SecurityService.cs delete mode 100644 User.cs diff --git a/Acl.cs b/Acl.cs new file mode 100644 index 0000000..581a8bc --- /dev/null +++ b/Acl.cs @@ -0,0 +1,35 @@ +namespace HyperBooru; + +public enum AclRuleAction { + Allow, + Deny +} + +public class Acl : HBObject { + public HBObject Subject { get; set; } + public List Rules { get; set; } +} + +public class Acl : Acl where T : Enum { + public Type Type => typeof(T); + + public new List> Rules { + get => base.Rules.Cast>().ToList(); + set => base.Rules = value.Cast().ToList(); + } +} + +public class AclRule : HBObject { + public HBPrincipal Principal { get; set; } + public AclRuleAction Action { get; set; } + public ulong Permissions { get; set; } +} + +public class AclRule : AclRule where T : Enum { + public Type Type => typeof(T); + + public new T Permissions { + get => (T) (object) base.Permissions; + set => base.Permissions = (ulong) (object) value; + } +} diff --git a/HBContext.cs b/HBContext.cs index c15c20b..c38a614 100644 --- a/HBContext.cs +++ b/HBContext.cs @@ -14,13 +14,19 @@ public class HBContext : DbContext { public static readonly Guid IngestTag = new("EA212801-5BCC-4C0E-814F-FB9D30DB58BC"); public DbSet Objects { get; set; } - public DbSet Users { get; set; } public DbSet TagDefinitions { get; set; } public DbSet Tags { get; set; } public DbSet Media { get; set; } public DbSet UploadedFiles { get; set; } public DbSet OcrData { get; set; } + // Security-related tables + public DbSet Principals { get; set; } + public DbSet Users { get; set; } + public DbSet Groups { get; set; } + public DbSet Acls { get; set; } + public DbSet AclRules { get; set; } + private IConfigService config; public HBContext(DbContextOptions options, IConfigService config) : base(options) => diff --git a/HBObject.cs b/HBObject.cs index 8001ea3..ba1c226 100644 --- a/HBObject.cs +++ b/HBObject.cs @@ -11,4 +11,5 @@ public class HBObject { public int ObjectId { get; set; } public Guid Guid { get; set; } = Guid.NewGuid(); public virtual List Tags { get; set; } = new(); + public Acl? Acl { get; set; } } \ No newline at end of file diff --git a/Pages/Component/Titlebar.razor b/Pages/Component/Titlebar.razor index 1772519..ad41532 100644 --- a/Pages/Component/Titlebar.razor +++ b/Pages/Component/Titlebar.razor @@ -2,12 +2,10 @@