grafana/pkg/models/dashboard_acl.go

113 lines
3.2 KiB
Go
Raw Normal View History

package models
2017-06-09 14:56:13 -05:00
import (
"errors"
"time"
)
type PermissionType int
const (
2017-06-09 14:56:13 -05:00
PERMISSION_VIEW PermissionType = 1 << iota
PERMISSION_EDIT
2017-06-20 16:18:20 -05:00
PERMISSION_ADMIN
)
func (p PermissionType) String() string {
names := map[int]string{
2017-06-20 16:18:20 -05:00
int(PERMISSION_VIEW): "View",
int(PERMISSION_EDIT): "Edit",
int(PERMISSION_ADMIN): "Admin",
}
return names[int(p)]
}
// Typed errors
2017-06-09 14:56:13 -05:00
var (
ErrDashboardAclInfoMissing = errors.New("User id and team id cannot both be empty for a dashboard permission")
ErrDashboardPermissionDashboardEmpty = errors.New("Dashboard Id must be greater than zero for a dashboard permission")
ErrFolderAclInfoMissing = errors.New("User id and team id cannot both be empty for a folder permission")
ErrFolderPermissionFolderEmpty = errors.New("Folder Id must be greater than zero for a folder permission")
2017-06-09 14:56:13 -05:00
)
// Dashboard ACL model
type DashboardAcl struct {
2017-06-19 17:19:58 -05:00
Id int64
OrgId int64
DashboardId int64
2017-12-11 10:46:05 -06:00
UserId int64
TeamId int64
Role *RoleType // pointer to be nullable
Permission PermissionType
2017-06-19 17:19:58 -05:00
Created time.Time
Updated time.Time
}
type DashboardAclInfoDTO struct {
OrgId int64 `json:"-"`
2018-02-20 08:25:16 -06:00
DashboardId int64 `json:"dashboardId,omitempty"`
FolderId int64 `json:"folderId,omitempty"`
Created time.Time `json:"created"`
Updated time.Time `json:"updated"`
UserId int64 `json:"userId"`
UserLogin string `json:"userLogin"`
UserEmail string `json:"userEmail"`
2018-02-14 08:02:42 -06:00
UserAvatarUrl string `json:"userAvatarUrl"`
2017-12-11 10:46:05 -06:00
TeamId int64 `json:"teamId"`
2018-02-14 08:02:42 -06:00
TeamEmail string `json:"teamEmail"`
TeamAvatarUrl string `json:"teamAvatarUrl"`
2017-12-11 10:46:05 -06:00
Team string `json:"team"`
2017-06-22 16:10:43 -05:00
Role *RoleType `json:"role,omitempty"`
2017-06-21 13:11:16 -05:00
Permission PermissionType `json:"permission"`
2017-06-16 20:25:24 -05:00
PermissionName string `json:"permissionName"`
Uid string `json:"uid"`
Title string `json:"title"`
Slug string `json:"slug"`
IsFolder bool `json:"isFolder"`
Url string `json:"url"`
Inherited bool `json:"inherited"`
}
func (dto *DashboardAclInfoDTO) hasSameRoleAs(other *DashboardAclInfoDTO) bool {
if dto.Role == nil || other.Role == nil {
return false
}
return dto.UserId <= 0 && dto.TeamId <= 0 && dto.UserId == other.UserId && dto.TeamId == other.TeamId && *dto.Role == *other.Role
}
func (dto *DashboardAclInfoDTO) hasSameUserAs(other *DashboardAclInfoDTO) bool {
return dto.UserId > 0 && dto.UserId == other.UserId
}
func (dto *DashboardAclInfoDTO) hasSameTeamAs(other *DashboardAclInfoDTO) bool {
return dto.TeamId > 0 && dto.TeamId == other.TeamId
}
// IsDuplicateOf returns true if other item has same role, same user or same team
func (dto *DashboardAclInfoDTO) IsDuplicateOf(other *DashboardAclInfoDTO) bool {
return dto.hasSameRoleAs(other) || dto.hasSameUserAs(other) || dto.hasSameTeamAs(other)
}
//
// COMMANDS
//
2017-06-21 18:02:03 -05:00
type UpdateDashboardAclCommand struct {
DashboardId int64
Items []*DashboardAcl
}
//
// QUERIES
//
2017-06-19 16:30:54 -05:00
type GetDashboardAclInfoListQuery struct {
2017-06-19 10:03:54 -05:00
DashboardId int64
2017-06-19 10:54:37 -05:00
OrgId int64
2017-06-22 16:10:43 -05:00
Result []*DashboardAclInfoDTO
2017-06-19 10:03:54 -05:00
}