56 рядки
1.0 KiB
Go
56 рядки
1.0 KiB
Go
package domain
|
|
|
|
import "time"
|
|
|
|
type Role string
|
|
|
|
const (
|
|
RoleOwner Role = "owner"
|
|
RoleEditor Role = "editor"
|
|
RoleReader Role = "reader"
|
|
)
|
|
|
|
type Action int
|
|
|
|
const (
|
|
ActionViewList Action = iota
|
|
ActionEditListMeta
|
|
ActionDeleteList
|
|
ActionManageShares
|
|
ActionViewItems
|
|
ActionAddItem
|
|
ActionEditItem
|
|
ActionDeleteItem
|
|
ActionChangeItemState
|
|
ActionReserveItem
|
|
)
|
|
|
|
type List struct {
|
|
ID int64
|
|
OwnerID int64
|
|
Title string
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
type Access struct {
|
|
List List
|
|
Role Role
|
|
}
|
|
|
|
func Allowed(role Role, action Action) bool {
|
|
switch action {
|
|
case ActionViewList:
|
|
return role == RoleOwner || role == RoleEditor || role == RoleReader
|
|
case ActionEditListMeta, ActionDeleteList, ActionManageShares:
|
|
return role == RoleOwner
|
|
case ActionViewItems:
|
|
return role == RoleOwner || role == RoleEditor || role == RoleReader
|
|
case ActionAddItem, ActionEditItem, ActionDeleteItem,
|
|
ActionChangeItemState, ActionReserveItem:
|
|
return role == RoleOwner || role == RoleEditor
|
|
default:
|
|
return false
|
|
}
|
|
}
|