From 7f98f4b4116d2b6d91eba3b91feca817cd026b33 Mon Sep 17 00:00:00 2001 From: idafurjes <36131195+idafurjes@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:40:02 +0200 Subject: [PATCH] Move role types to a separate package (#55665) * Move role types to a separate package * Make role type singular and remove _ from directory name --- pkg/models/roletype/role_type.go | 69 ++++++++++++++++++++++++++++++++ pkg/services/org/model.go | 60 ++------------------------- pkg/services/user/model.go | 6 +-- 3 files changed, 75 insertions(+), 60 deletions(-) create mode 100644 pkg/models/roletype/role_type.go diff --git a/pkg/models/roletype/role_type.go b/pkg/models/roletype/role_type.go new file mode 100644 index 00000000000..bcb3f20015f --- /dev/null +++ b/pkg/models/roletype/role_type.go @@ -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 +} diff --git a/pkg/services/org/model.go b/pkg/services/org/model.go index 596dcc3101c..74a3fa4ae70 100644 --- a/pkg/services/org/model.go +++ b/pkg/services/org/model.go @@ -2,9 +2,10 @@ package org import ( "errors" - "fmt" "strings" "time" + + "github.com/grafana/grafana/pkg/models/roletype" ) // Typed errors @@ -37,8 +38,7 @@ type OrgUser struct { Updated time.Time } -// swagger:enum RoleType -type RoleType string +type RoleType = roletype.RoleType const ( RoleViewer RoleType = "Viewer" @@ -156,60 +156,6 @@ type RemoveOrgUserCommand struct { UserWasDeleted bool } -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 -} - type ByOrgName []*UserOrgDTO // Len returns the length of an array of organisations. diff --git a/pkg/services/user/model.go b/pkg/services/user/model.go index a9aeb4b31f1..d999b8d4f7f 100644 --- a/pkg/services/user/model.go +++ b/pkg/services/user/model.go @@ -6,7 +6,7 @@ import ( "strings" "time" - "github.com/grafana/grafana/pkg/services/org" + "github.com/grafana/grafana/pkg/models/roletype" ) type HelpFlags1 uint64 @@ -196,7 +196,7 @@ type SignedInUser struct { UserID int64 `xorm:"user_id"` OrgID int64 `xorm:"org_id"` OrgName string - OrgRole org.RoleType + OrgRole roletype.RoleType ExternalAuthModule string ExternalAuthID string Login string @@ -268,7 +268,7 @@ func (u *SignedInUser) ToUserDisplayDTO() *UserDisplayDTO { } } -func (u *SignedInUser) HasRole(role org.RoleType) bool { +func (u *SignedInUser) HasRole(role roletype.RoleType) bool { if u.IsGrafanaAdmin { return true }