···
e = some(where (p.eft == allow))
-
m = (r.act == p.act && r.dom == p.dom && keyMatch2(r.obj, p.obj) && g(r.sub, p.sub, r.dom))
-
E *casbin.SyncedEnforcer
func keyMatch2(key1 string, key2 string) bool {
···
-
func NewEnforcer(domain string) (*Enforcer, error) {
m, err := model.NewModelFromString(Model)
···
e.AddFunction("keyMatch2", keyMatch2Func)
// Add policies with patterns
-
_, err = e.AddPolicies([][]string{
{"server:owner", domain, domain, "server:invite"},
-
{"server:owner", domain, domain, "repo:create"},
-
{"server:owner", domain, domain, "repo:delete"}, // priveledged operation, delete any repo in domain
-
{"server:member", domain, domain, "repo:create"}, // priveledged operation, delete any repo in domain
-
return &Enforcer{e, domain}, nil
-
func (e *Enforcer) AddOwner(owner string) error {
-
_, err := e.E.AddGroupingPolicy(owner, "server:owner", e.domain)
-
func (e *Enforcer) AddMember(member string) error {
-
_, err := e.E.AddGroupingPolicy(member, "server:member", e.domain)
func (e *Enforcer) AddRepo(member, domain, repo string) error {
_, err := e.E.AddPolicies([][]string{
-
{member, e.domain, repo, "repo:push"},
-
{member, e.domain, repo, "repo:owner"},
-
{member, e.domain, repo, "repo:invite"},
-
{member, e.domain, repo, "repo:delete"},
···
e = some(where (p.eft == allow))
+
m = r.act == p.act && r.dom == p.dom && keyMatch2(r.obj, p.obj) && g(r.sub, p.sub, r.dom)
+
E *casbin.SyncedEnforcer
func keyMatch2(key1 string, key2 string) bool {
···
+
func NewEnforcer() (*Enforcer, error) {
m, err := model.NewModelFromString(Model)
···
e.AddFunction("keyMatch2", keyMatch2Func)
+
return &Enforcer{e}, nil
+
func (e *Enforcer) AddDomain(domain string) error {
// Add policies with patterns
+
_, err := e.E.AddPolicies([][]string{
{"server:owner", domain, domain, "server:invite"},
+
{"server:member", domain, domain, "repo:create"},
+
// all owners are also members
+
_, err = e.E.AddGroupingPolicy("server:owner", "server:member", domain)
+
func (e *Enforcer) AddOwner(domain, owner string) error {
+
_, err := e.E.AddGroupingPolicy(owner, "server:owner", domain)
+
func (e *Enforcer) AddMember(domain, member string) error {
+
_, err := e.E.AddGroupingPolicy(member, "server:member", domain)
func (e *Enforcer) AddRepo(member, domain, repo string) error {
_, err := e.E.AddPolicies([][]string{
+
{member, domain, repo, "repo:push"},
+
{member, domain, repo, "repo:owner"},
+
{member, domain, repo, "repo:invite"},
+
{member, domain, repo, "repo:delete"},
+
{"server:owner", domain, repo, "repo:delete"}, // server owner can delete any repo