summaryrefslogtreecommitdiff
path: root/Acl.cs
blob: 581a8bce08170e543de114ae7675764bfdf9415d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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;
    }
}