forked from tangled.org/core
this repo has no description
at master 2.1 kB view raw
1package rbac 2 3import ( 4 "fmt" 5 "slices" 6 "strings" 7) 8 9func (e *Enforcer) getDomainsForUser(did string, keepFunc func(string) bool, stripFunc func(string) string) ([]string, error) { 10 domains, err := e.E.GetDomainsForUser(did) 11 if err != nil { 12 return nil, err 13 } 14 15 n := 0 16 for _, x := range domains { 17 if keepFunc(x) { 18 domains[n] = stripFunc(x) 19 n++ 20 } 21 } 22 domains = domains[:n] 23 24 return domains, nil 25} 26 27func (e *Enforcer) addOwner(domain, owner string) error { 28 _, err := e.E.AddGroupingPolicy(owner, "server:owner", domain) 29 return err 30} 31 32func (e *Enforcer) removeOwner(domain, owner string) error { 33 _, err := e.E.RemoveGroupingPolicy(owner, "server:owner", domain) 34 return err 35} 36 37func (e *Enforcer) addMember(domain, member string) error { 38 _, err := e.E.AddGroupingPolicy(member, "server:member", domain) 39 return err 40} 41 42func (e *Enforcer) removeMember(domain, member string) error { 43 _, err := e.E.RemoveGroupingPolicy(member, "server:member", domain) 44 return err 45} 46 47func (e *Enforcer) isRole(user, role, domain string) (bool, error) { 48 roles, err := e.E.GetImplicitRolesForUser(user, domain) 49 if err != nil { 50 return false, err 51 } 52 if slices.Contains(roles, role) { 53 return true, nil 54 } 55 return false, nil 56} 57 58func (e *Enforcer) isInviteAllowed(user, domain string) (bool, error) { 59 return e.E.Enforce(user, domain, domain, "server:invite") 60} 61 62func checkRepoFormat(repo string) error { 63 // sanity check, repo must be of the form ownerDid/repo 64 if parts := strings.SplitN(repo, "/", 2); !strings.HasPrefix(parts[0], "did:") { 65 return fmt.Errorf("invalid repo: %s", repo) 66 } 67 68 return nil 69} 70 71const spindlePrefix = "spindle:" 72 73func intoSpindle(domain string) string { 74 if !isSpindle(domain) { 75 return spindlePrefix + domain 76 } 77 return domain 78} 79 80func unSpindle(domain string) string { 81 if !isSpindle(domain) { 82 return domain 83 } 84 return strings.TrimPrefix(domain, spindlePrefix) 85} 86 87func isSpindle(domain string) bool { 88 return strings.HasPrefix(domain, spindlePrefix) 89} 90 91func isNotSpindle(domain string) bool { 92 return !isSpindle(domain) 93}