Move role types to a separate package (#55665)

* Move role types to a separate package

* Make role type singular and remove _ from directory name
This commit is contained in:
idafurjes
2022-09-23 12:40:02 +02:00
committed by GitHub
parent 3eaeffda07
commit 7f98f4b411
3 changed files with 75 additions and 60 deletions
+69
View File
@@ -0,0 +1,69 @@
package roletype
import (
"fmt"
"strings"
)
// swagger:enum RoleType
type RoleType string
const (
RoleViewer RoleType = "Viewer"
RoleEditor RoleType = "Editor"
RoleAdmin RoleType = "Admin"
)
func (r RoleType) IsValid() bool {
return r == RoleViewer || r == RoleAdmin || r == RoleEditor
}
func (r RoleType) Includes(other RoleType) bool {
if r == RoleAdmin {
return true
}
if r == RoleEditor {
return other != RoleAdmin
}
return r == other
}
func (r RoleType) Children() []RoleType {
switch r {
case RoleAdmin:
return []RoleType{RoleEditor, RoleViewer}
case RoleEditor:
return []RoleType{RoleViewer}
default:
return nil
}
}
func (r RoleType) Parents() []RoleType {
switch r {
case RoleEditor:
return []RoleType{RoleAdmin}
case RoleViewer:
return []RoleType{RoleEditor, RoleAdmin}
default:
return nil
}
}
func (r *RoleType) UnmarshalText(data []byte) error {
// make sure "viewer" and "Viewer" are both correct
str := strings.Title(string(data))
*r = RoleType(str)
if !r.IsValid() {
if (*r) != "" {
return fmt.Errorf("invalid role value: %s", *r)
}
*r = RoleViewer
}
return nil
}