summaryrefslogtreecommitdiff
path: root/Acl.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Acl.cs')
-rw-r--r--Acl.cs35
1 files changed, 35 insertions, 0 deletions
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<AclRule> Rules { get; set; }
+}
+
+public class Acl<T> : Acl where T : Enum {
+ public Type Type => typeof(T);
+
+ public new List<AclRule<T>> Rules {
+ get => base.Rules.Cast<AclRule<T>>().ToList();
+ set => base.Rules = value.Cast<AclRule>().ToList();
+ }
+}
+
+public class AclRule : HBObject {
+ public HBPrincipal Principal { get; set; }
+ public AclRuleAction Action { get; set; }
+ public ulong Permissions { get; set; }
+}
+
+public class AclRule<T> : AclRule where T : Enum {
+ public Type Type => typeof(T);
+
+ public new T Permissions {
+ get => (T) (object) base.Permissions;
+ set => base.Permissions = (ulong) (object) value;
+ }
+}