summaryrefslogtreecommitdiff
path: root/Acl.cs
blob: 7bffc50c06f863caed29e4c32a6148d247a39997 (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
36
37
38
39
40
41
42
using System.ComponentModel.DataAnnotations.Schema;

namespace HyperBooru;

public enum AclRuleAction {
    Allow,
    Deny
}

public class Acl {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int           AclId   { get; set; }
    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 {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int                AclRuleId   { get; set; }
    public SecurityIdentifier Principal   { get; set; }
    public AclRuleAction      Action      { get; set; }
    [Column(TypeName = "bigint")]
    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;
    }
}