Auth: Add empty role definition (#64694)

* Allow setting role as None

Co-authored-by: gamab <gabi.mabs@gmail.com>

Seeking for places where role.None would be used

Co-authored-by: Jguer <joao.guerreiro@grafana.com>

Adding None role to the frontend

Co-authored-by: Jguer <joao.guerreiro@grafana.com>

unify org role declaration and remove from add permission

fix backend test

fix backend lint

* remove role none from frontend

* Simplify checks

Co-authored-by: Kalle Persson <kalle.persson@grafana.com>

* nits

---------

Co-authored-by: Kalle Persson <kalle.persson@grafana.com>
This commit is contained in:
Jo
2023-07-06 15:40:06 +02:00
committed by GitHub
co-authored by gamab Kalle Persson
parent b6fbf307d9
commit d6c468c1c2
12 changed files with 103 additions and 39 deletions
+35 -24
View File
@@ -9,47 +9,58 @@ import (
type RoleType string
const (
RoleNone RoleType = "None"
RoleViewer RoleType = "Viewer"
RoleEditor RoleType = "Editor"
RoleAdmin RoleType = "Admin"
)
var rolePrecedence = map[RoleType]int{
RoleNone: 10,
RoleViewer: 20,
RoleEditor: 30,
RoleAdmin: 40,
}
// Needed to keep stable order
var roleOrder = [...]RoleType{
RoleNone,
RoleViewer,
RoleEditor,
RoleAdmin,
}
func (r RoleType) IsValid() bool {
return r == RoleViewer || r == RoleAdmin || r == RoleEditor
_, ok := rolePrecedence[r]
return ok
}
func (r RoleType) Includes(other RoleType) bool {
if r == RoleAdmin {
return true
}
if r == RoleEditor {
return other != RoleAdmin
}
return r == other
return rolePrecedence[r] >= rolePrecedence[other]
}
func (r RoleType) Children() []RoleType {
switch r {
case RoleAdmin:
return []RoleType{RoleEditor, RoleViewer}
case RoleEditor:
return []RoleType{RoleViewer}
default:
return nil
children := make([]RoleType, 0, 3)
for _, role := range roleOrder {
if rolePrecedence[r] > rolePrecedence[role] {
children = append(children, role)
}
}
return children
}
func (r RoleType) Parents() []RoleType {
switch r {
case RoleEditor:
return []RoleType{RoleAdmin}
case RoleViewer:
return []RoleType{RoleEditor, RoleAdmin}
default:
return nil
parents := make([]RoleType, 0, 3)
for _, role := range roleOrder {
if rolePrecedence[r] < rolePrecedence[role] {
parents = append(parents, role)
}
}
return parents
}
func (r *RoleType) UnmarshalText(data []byte) error {