stillbox/pkg/rbac/policy/policy.go

244 lines
6.6 KiB
Go
Raw Normal View History

package policy
2025-01-20 20:28:25 -05:00
import (
"dynatron.me/x/stillbox/pkg/rbac/entities"
2025-01-20 20:28:25 -05:00
"github.com/el-mike/restrict/v2"
)
2025-01-20 22:38:27 -05:00
const (
PresetUpdateOwn = "updateOwn"
PresetDeleteOwn = "deleteOwn"
PresetReadShared = "readShared"
PresetReadSharedInMap = "readSharedInMap"
PresetShareOwn = "shareOwn"
2025-01-21 08:43:03 -05:00
PresetUpdateSubmitter = "updateSubmitter"
PresetDeleteSubmitter = "deleteSubmitter"
PresetShareSubmitter = "shareSubmitter"
2025-01-20 22:38:27 -05:00
PresetReadInSharedIncident = "readInSharedIncident"
)
var Policy = &restrict.PolicyDefinition{
2025-01-20 20:28:25 -05:00
Roles: restrict.Roles{
entities.RoleUser: {
2025-01-20 20:28:25 -05:00
Description: "An authenticated user",
Grants: restrict.GrantsMap{
entities.ResourceIncident: {
&restrict.Permission{Action: entities.ActionRead},
&restrict.Permission{Action: entities.ActionCreate},
2025-01-20 20:28:25 -05:00
&restrict.Permission{Preset: PresetUpdateOwn},
&restrict.Permission{Preset: PresetDeleteOwn},
&restrict.Permission{Preset: PresetShareOwn},
},
entities.ResourceCall: {
&restrict.Permission{Action: entities.ActionRead},
&restrict.Permission{Action: entities.ActionCreate},
2025-01-20 20:28:25 -05:00
&restrict.Permission{Preset: PresetUpdateSubmitter},
&restrict.Permission{Preset: PresetDeleteSubmitter},
&restrict.Permission{Action: entities.ActionShare},
2025-01-20 20:28:25 -05:00
},
entities.ResourceTalkgroup: {
&restrict.Permission{Action: entities.ActionRead},
2025-01-20 20:28:25 -05:00
},
entities.ResourceShare: {
&restrict.Permission{Action: entities.ActionRead},
&restrict.Permission{Action: entities.ActionCreate},
2025-01-20 20:28:25 -05:00
&restrict.Permission{Preset: PresetUpdateOwn},
&restrict.Permission{Preset: PresetDeleteOwn},
},
},
},
entities.RoleSubmitter: {
2025-01-20 20:28:25 -05:00
Description: "A role that can submit calls",
Grants: restrict.GrantsMap{
entities.ResourceCall: {
&restrict.Permission{Action: entities.ActionCreate},
2025-01-20 20:28:25 -05:00
},
entities.ResourceTalkgroup: {
2025-01-20 20:28:25 -05:00
// for learning TGs
&restrict.Permission{Action: entities.ActionCreate},
&restrict.Permission{Action: entities.ActionUpdate},
2025-01-20 20:28:25 -05:00
},
},
},
entities.RoleShareGuest: {
2025-01-20 20:28:25 -05:00
Description: "Someone who has a valid share link",
Grants: restrict.GrantsMap{
entities.ResourceCall: {
2025-01-20 20:28:25 -05:00
&restrict.Permission{Preset: PresetReadShared},
2025-01-20 22:38:27 -05:00
&restrict.Permission{Preset: PresetReadInSharedIncident},
2025-01-20 20:28:25 -05:00
},
entities.ResourceIncident: {
2025-01-20 20:28:25 -05:00
&restrict.Permission{Preset: PresetReadShared},
},
entities.ResourceTalkgroup: {
&restrict.Permission{Action: entities.ActionRead},
2025-01-20 20:28:25 -05:00
},
},
},
entities.RoleAdmin: {
Parents: []string{entities.RoleUser},
2025-01-20 20:28:25 -05:00
Grants: restrict.GrantsMap{
entities.ResourceIncident: {
&restrict.Permission{Action: entities.ActionUpdate},
&restrict.Permission{Action: entities.ActionDelete},
&restrict.Permission{Action: entities.ActionShare},
2025-01-20 20:28:25 -05:00
},
entities.ResourceCall: {
&restrict.Permission{Action: entities.ActionUpdate},
&restrict.Permission{Action: entities.ActionDelete},
&restrict.Permission{Action: entities.ActionShare},
2025-01-20 20:28:25 -05:00
},
entities.ResourceTalkgroup: {
&restrict.Permission{Action: entities.ActionUpdate},
&restrict.Permission{Action: entities.ActionCreate},
&restrict.Permission{Action: entities.ActionDelete},
2025-01-20 20:28:25 -05:00
},
},
},
entities.RoleSystem: {
Parents: []string{entities.RoleSystem},
2025-01-20 20:28:25 -05:00
},
entities.RolePublic: {
2025-01-20 20:28:25 -05:00
/*
Grants: restrict.GrantsMap{
entities.ResourceShare: {
&restrict.Permission{Action: entities.ActionRead},
2025-01-20 20:28:25 -05:00
},
},
*/
},
},
PermissionPresets: restrict.PermissionPresets{
PresetUpdateOwn: &restrict.Permission{
Action: entities.ActionUpdate,
2025-01-20 20:28:25 -05:00
Conditions: restrict.Conditions{
&restrict.EqualCondition{
ID: "isOwner",
Left: &restrict.ValueDescriptor{
Source: restrict.ResourceField,
Field: "Owner",
},
Right: &restrict.ValueDescriptor{
Source: restrict.SubjectField,
Field: "ID",
},
},
},
},
PresetDeleteOwn: &restrict.Permission{
Action: entities.ActionDelete,
2025-01-20 20:28:25 -05:00
Conditions: restrict.Conditions{
&restrict.EqualCondition{
ID: "isOwner",
Left: &restrict.ValueDescriptor{
Source: restrict.ResourceField,
Field: "Owner",
},
Right: &restrict.ValueDescriptor{
Source: restrict.SubjectField,
Field: "ID",
},
},
},
},
PresetShareOwn: &restrict.Permission{
Action: entities.ActionShare,
2025-01-20 20:28:25 -05:00
Conditions: restrict.Conditions{
&restrict.EqualCondition{
ID: "isOwner",
Left: &restrict.ValueDescriptor{
Source: restrict.ResourceField,
Field: "Owner",
},
Right: &restrict.ValueDescriptor{
Source: restrict.SubjectField,
Field: "ID",
},
},
},
},
PresetUpdateSubmitter: &restrict.Permission{
Action: entities.ActionUpdate,
2025-01-20 20:28:25 -05:00
Conditions: restrict.Conditions{
&SubmitterEqualCondition{
ID: "isSubmitter",
Left: &restrict.ValueDescriptor{
Source: restrict.ResourceField,
Field: "Submitter",
},
Right: &restrict.ValueDescriptor{
Source: restrict.SubjectField,
Field: "ID",
},
},
},
},
PresetDeleteSubmitter: &restrict.Permission{
Action: entities.ActionDelete,
2025-01-20 20:28:25 -05:00
Conditions: restrict.Conditions{
&SubmitterEqualCondition{
ID: "isSubmitter",
Left: &restrict.ValueDescriptor{
Source: restrict.ResourceField,
Field: "Submitter",
},
Right: &restrict.ValueDescriptor{
Source: restrict.SubjectField,
Field: "ID",
},
},
},
},
PresetShareSubmitter: &restrict.Permission{
Action: entities.ActionShare,
2025-01-20 20:28:25 -05:00
Conditions: restrict.Conditions{
&SubmitterEqualCondition{
ID: "isSubmitter",
Left: &restrict.ValueDescriptor{
Source: restrict.ResourceField,
Field: "Submitter",
},
Right: &restrict.ValueDescriptor{
Source: restrict.SubjectField,
Field: "ID",
},
},
},
},
PresetReadShared: &restrict.Permission{
Action: entities.ActionRead,
2025-01-20 20:28:25 -05:00
Conditions: restrict.Conditions{
&restrict.EqualCondition{
ID: "isOwner",
Left: &restrict.ValueDescriptor{
Source: restrict.ResourceField,
Field: "ID",
},
Right: &restrict.ValueDescriptor{
Source: restrict.SubjectField,
Field: "EntityID",
},
},
},
},
2025-01-20 22:38:27 -05:00
PresetReadInSharedIncident: &restrict.Permission{
Action: entities.ActionRead,
2025-01-20 22:38:27 -05:00
Conditions: restrict.Conditions{
2025-01-21 08:43:03 -05:00
&CallInIncidentCondition{
2025-01-20 22:38:27 -05:00
ID: "callInIncident",
Call: &restrict.ValueDescriptor{
Source: restrict.ResourceField,
Field: "ID",
},
Incident: &restrict.ValueDescriptor{
Source: restrict.SubjectField,
Field: "EntityID",
},
},
},
},
2025-01-20 20:28:25 -05:00
},
}