Ctrl K
ComunidadGuías…

rbac/role.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package rbac

import (
	"slices"
)

const (
	RoleAdmin  RoleName = "Admin"
	RoleEditor RoleName = "Editor"
	RoleViewer RoleName = "Viewer"
)

var (
	Roles = []Role{
		NewRole(RoleAdmin,
			NewPermission(ScopeAll, ActionAll, nil),
		),
		NewRole(RoleEditor,
			NewPermission(ScopeAll, ActionView, nil),
			NewPermission(ScopeProjectApplicationCategories, ActionEdit, nil),
			NewPermission(ScopeProjectCustomApplications, ActionEdit, nil),
			NewPermission(ScopeProjectCustomCloudPricing, ActionEdit, nil),
			NewPermission(ScopeProjectInspections, ActionEdit, nil),
			NewPermission(ScopeProjectRisks, ActionEdit, nil),
			NewPermission(ScopeDashboards, ActionEdit, nil),
			NewPermission(ScopeProjectAlertingRules, ActionEdit, nil),
			NewPermission(ScopeProjectAlerts, ActionEdit, nil),
		),
		NewRole(RoleViewer,
			NewPermission(ScopeAll, ActionView, nil),
		),
	}
)

type RoleName string

func (r RoleName) Valid(roles []Role) bool {
	return slices.ContainsFunc(roles, func(role Role) bool { return role.Name == r })
}

func (r RoleName) Builtin() bool {
	return r.Valid(Roles)
}

type Role struct {
	Name        RoleName      `json:"name"`
	Permissions PermissionSet `json:"permissions"`
}

func NewRole(name RoleName, permissions ...Permission) Role {
	return Role{Name: name, Permissions: permissions}
}

type RoleManager interface {
	GetRoles() ([]Role, error)
}

type StaticRoleManager struct{}

func NewStaticRoleManager() *StaticRoleManager {
	return &StaticRoleManager{}
}

func (mgr *StaticRoleManager) GetRoles() ([]Role, error) {
	return Roles, nil
}