github.com/pavlo67/common@v0.5.3/common/rbac/roles.go (about) 1 package rbac 2 3 import ( 4 "encoding/json" 5 ) 6 7 type Role string 8 9 const ( 10 RoleAdmin Role = "admin" 11 RoleUser Role = "user" 12 ) 13 14 type Roles []Role 15 16 func (roles Roles) Has(role ...Role) bool { 17 for _, oneOf := range role { 18 for _, r := range roles { 19 if r == oneOf { 20 //logPrintf("checked (%#v) as (%#v): true", role, roles) 21 return true 22 } 23 } 24 } 25 26 //logPrintf("checked (%#v) as (%#v): false", role, roles) 27 28 return false 29 } 30 31 func (roles Roles) Filter(role ...Role) Roles { 32 var rolesFiltered Roles 33 for _, r := range roles { 34 for _, oneOf := range role { 35 if r == oneOf { 36 rolesFiltered = append(rolesFiltered, r) 37 } 38 } 39 } 40 41 return rolesFiltered 42 } 43 44 func (roles Roles) FilterNot(role ...Role) Roles { 45 var rolesFiltered Roles 46 47 ROLES: 48 for _, r := range roles { 49 for _, oneOf := range role { 50 if r == oneOf { 51 continue ROLES 52 } 53 } 54 rolesFiltered = append(rolesFiltered, r) 55 } 56 57 return rolesFiltered 58 } 59 60 func (roles Roles) MarshalJSON() ([]byte, error) { 61 if len(roles) < 1 { 62 return []byte("[]"), nil 63 } 64 65 var rs []string 66 67 for _, r := range roles { 68 rs = append(rs, string(r)) 69 } 70 71 bytes, err := json.Marshal(rs) 72 return bytes, err 73 } 74 75 func (roles Roles) ToStringList() []string { 76 l := make([]string, 0, len(roles)) 77 for _, role := range roles { 78 l = append(l, string(role)) 79 } 80 return l 81 }