···
e = some(where (p.eft == allow))
27
-
m = (r.act == p.act && r.dom == p.dom && keyMatch2(r.obj, p.obj) && g(r.sub, p.sub, r.dom))
27
+
m = r.act == p.act && r.dom == p.dom && keyMatch2(r.obj, p.obj) && g(r.sub, p.sub, r.dom)
32
-
E *casbin.SyncedEnforcer
32
+
E *casbin.SyncedEnforcer
func keyMatch2(key1 string, key2 string) bool {
···
41
-
func NewEnforcer(domain string) (*Enforcer, error) {
40
+
func NewEnforcer() (*Enforcer, error) {
m, err := model.NewModelFromString(Model)
···
e.AddFunction("keyMatch2", keyMatch2Func)
65
+
return &Enforcer{e}, nil
68
+
func (e *Enforcer) AddDomain(domain string) error {
// Add policies with patterns
67
-
_, err = e.AddPolicies([][]string{
70
+
_, err := e.E.AddPolicies([][]string{
{"server:owner", domain, domain, "server:invite"},
69
-
{"server:owner", domain, domain, "repo:create"},
70
-
{"server:owner", domain, domain, "repo:delete"}, // priveledged operation, delete any repo in domain
71
-
{"server:member", domain, domain, "repo:create"}, // priveledged operation, delete any repo in domain
72
+
{"server:member", domain, domain, "repo:create"},
77
-
return &Enforcer{e, domain}, nil
78
+
// all owners are also members
79
+
_, err = e.E.AddGroupingPolicy("server:owner", "server:member", domain)
80
-
func (e *Enforcer) AddOwner(owner string) error {
81
-
_, err := e.E.AddGroupingPolicy(owner, "server:owner", e.domain)
83
+
func (e *Enforcer) AddOwner(domain, owner string) error {
84
+
_, err := e.E.AddGroupingPolicy(owner, "server:owner", domain)
85
-
func (e *Enforcer) AddMember(member string) error {
86
-
_, err := e.E.AddGroupingPolicy(member, "server:member", e.domain)
88
+
func (e *Enforcer) AddMember(domain, member string) error {
89
+
_, err := e.E.AddGroupingPolicy(member, "server:member", domain)
func (e *Enforcer) AddRepo(member, domain, repo string) error {
_, err := e.E.AddPolicies([][]string{
92
-
{member, e.domain, repo, "repo:push"},
93
-
{member, e.domain, repo, "repo:owner"},
94
-
{member, e.domain, repo, "repo:invite"},
95
-
{member, e.domain, repo, "repo:delete"},
95
+
{member, domain, repo, "repo:push"},
96
+
{member, domain, repo, "repo:owner"},
97
+
{member, domain, repo, "repo:invite"},
98
+
{member, domain, repo, "repo:delete"},
99
+
{"server:owner", domain, repo, "repo:delete"}, // server owner can delete any repo