this repo has no description

simplify enforcer

Akshay 1598091a ecee8452

Changed files
+42 -25
appview
+22 -18
appview/state/rbac.go
··· 24 e = some(where (p.eft == allow)) 25 26 [matchers] 27 - m = (r.act == p.act && r.dom == p.dom && keyMatch2(r.obj, p.obj) && g(r.sub, p.sub, r.dom)) 28 ` 29 ) 30 31 type Enforcer struct { 32 - E *casbin.SyncedEnforcer 33 - domain string 34 } 35 36 func keyMatch2(key1 string, key2 string) bool { ··· 38 return matched 39 } 40 41 - func NewEnforcer(domain string) (*Enforcer, error) { 42 m, err := model.NewModelFromString(Model) 43 if err != nil { 44 return nil, err ··· 63 e.EnableAutoSave(true) 64 e.AddFunction("keyMatch2", keyMatch2Func) 65 66 // Add policies with patterns 67 - _, err = e.AddPolicies([][]string{ 68 {"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 }) 73 if err != nil { 74 - return nil, err 75 } 76 77 - return &Enforcer{e, domain}, nil 78 } 79 80 - func (e *Enforcer) AddOwner(owner string) error { 81 - _, err := e.E.AddGroupingPolicy(owner, "server:owner", e.domain) 82 return err 83 } 84 85 - func (e *Enforcer) AddMember(member string) error { 86 - _, err := e.E.AddGroupingPolicy(member, "server:member", e.domain) 87 return err 88 } 89 90 func (e *Enforcer) AddRepo(member, domain, repo string) error { 91 _, 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"}, 96 }) 97 return err 98 }
··· 24 e = some(where (p.eft == allow)) 25 26 [matchers] 27 + m = r.act == p.act && r.dom == p.dom && keyMatch2(r.obj, p.obj) && g(r.sub, p.sub, r.dom) 28 ` 29 ) 30 31 type Enforcer struct { 32 + E *casbin.SyncedEnforcer 33 } 34 35 func keyMatch2(key1 string, key2 string) bool { ··· 37 return matched 38 } 39 40 + func NewEnforcer() (*Enforcer, error) { 41 m, err := model.NewModelFromString(Model) 42 if err != nil { 43 return nil, err ··· 62 e.EnableAutoSave(true) 63 e.AddFunction("keyMatch2", keyMatch2Func) 64 65 + return &Enforcer{e}, nil 66 + } 67 + 68 + func (e *Enforcer) AddDomain(domain string) error { 69 // Add policies with patterns 70 + _, err := e.E.AddPolicies([][]string{ 71 {"server:owner", domain, domain, "server:invite"}, 72 + {"server:member", domain, domain, "repo:create"}, 73 }) 74 if err != nil { 75 + return err 76 } 77 78 + // all owners are also members 79 + _, err = e.E.AddGroupingPolicy("server:owner", "server:member", domain) 80 + return err 81 } 82 83 + func (e *Enforcer) AddOwner(domain, owner string) error { 84 + _, err := e.E.AddGroupingPolicy(owner, "server:owner", domain) 85 return err 86 } 87 88 + func (e *Enforcer) AddMember(domain, member string) error { 89 + _, err := e.E.AddGroupingPolicy(member, "server:member", domain) 90 return err 91 } 92 93 func (e *Enforcer) AddRepo(member, domain, repo string) error { 94 _, err := e.E.AddPolicies([][]string{ 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 100 }) 101 return err 102 }
+20 -7
appview/state/state.go
··· 21 ) 22 23 type State struct { 24 - Db *db.DB 25 - Auth *auth.Auth 26 } 27 28 func Make() (*State, error) { ··· 36 return nil, err 37 } 38 39 - return &State{db, auth}, nil 40 } 41 42 func (s *State) Login(w http.ResponseWriter, r *http.Request) { ··· 223 w.Write([]byte("check success")) 224 225 // mark as registered 226 - err = s.Db.Register(domain) 227 if err != nil { 228 log.Println("failed to register domain", err) 229 http.Error(w, err.Error(), http.StatusInternalServerError) 230 } 231 232 // set permissions for this did as owner 233 - _, did, err := s.Db.RegistrationStatus(domain) 234 if err != nil { 235 log.Println("failed to register domain", err) 236 http.Error(w, err.Error(), http.StatusInternalServerError) 237 } 238 239 - e, err := NewEnforcer(domain) 240 if err != nil { 241 log.Println("failed to setup owner of domain", err) 242 http.Error(w, err.Error(), http.StatusInternalServerError) 243 } 244 245 - err = e.AddOwner(did) 246 if err != nil { 247 log.Println("failed to setup owner of domain", err) 248 http.Error(w, err.Error(), http.StatusInternalServerError)
··· 21 ) 22 23 type State struct { 24 + db *db.DB 25 + auth *auth.Auth 26 + enforcer *Enforcer 27 } 28 29 func Make() (*State, error) { ··· 37 return nil, err 38 } 39 40 + enforcer, err := NewEnforcer() 41 + if err != nil { 42 + return nil, err 43 + } 44 + 45 + return &State{db, auth, enforcer}, nil 46 } 47 48 func (s *State) Login(w http.ResponseWriter, r *http.Request) { ··· 229 w.Write([]byte("check success")) 230 231 // mark as registered 232 + err = s.db.Register(domain) 233 if err != nil { 234 log.Println("failed to register domain", err) 235 http.Error(w, err.Error(), http.StatusInternalServerError) 236 } 237 238 // set permissions for this did as owner 239 + _, did, err := s.db.RegistrationStatus(domain) 240 if err != nil { 241 log.Println("failed to register domain", err) 242 http.Error(w, err.Error(), http.StatusInternalServerError) 243 } 244 245 + if err != nil { 246 + log.Println("failed to setup owner of domain", err) 247 + http.Error(w, err.Error(), http.StatusInternalServerError) 248 + } 249 + 250 + // add basic acls for this domain 251 + err = s.enforcer.AddDomain(domain) 252 if err != nil { 253 log.Println("failed to setup owner of domain", err) 254 http.Error(w, err.Error(), http.StatusInternalServerError) 255 } 256 257 + // add this did as owner of this domain 258 + err = s.enforcer.AddOwner(domain, did) 259 if err != nil { 260 log.Println("failed to setup owner of domain", err) 261 http.Error(w, err.Error(), http.StatusInternalServerError)