2025-01-22 10:39:23 -05:00
|
|
|
package policy
|
2025-01-20 20:28:25 -05:00
|
|
|
|
|
|
|
import (
|
2025-01-22 10:39:23 -05:00
|
|
|
"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{
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.RoleUser: {
|
2025-01-20 20:28:25 -05:00
|
|
|
Description: "An authenticated user",
|
|
|
|
Grants: restrict.GrantsMap{
|
2025-01-22 10:39:23 -05:00
|
|
|
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},
|
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
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},
|
2025-01-22 10:39:23 -05:00
|
|
|
&restrict.Permission{Action: entities.ActionShare},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.ResourceTalkgroup: {
|
|
|
|
&restrict.Permission{Action: entities.ActionRead},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
2025-01-22 10:39:23 -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},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.RoleSubmitter: {
|
2025-01-20 20:28:25 -05:00
|
|
|
Description: "A role that can submit calls",
|
|
|
|
Grants: restrict.GrantsMap{
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.ResourceCall: {
|
|
|
|
&restrict.Permission{Action: entities.ActionCreate},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.ResourceTalkgroup: {
|
2025-01-20 20:28:25 -05:00
|
|
|
// for learning TGs
|
2025-01-22 10:39:23 -05:00
|
|
|
&restrict.Permission{Action: entities.ActionCreate},
|
|
|
|
&restrict.Permission{Action: entities.ActionUpdate},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.RoleShareGuest: {
|
2025-01-20 20:28:25 -05:00
|
|
|
Description: "Someone who has a valid share link",
|
|
|
|
Grants: restrict.GrantsMap{
|
2025-01-22 10:39:23 -05:00
|
|
|
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
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.ResourceIncident: {
|
2025-01-20 20:28:25 -05:00
|
|
|
&restrict.Permission{Preset: PresetReadShared},
|
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.ResourceTalkgroup: {
|
|
|
|
&restrict.Permission{Action: entities.ActionRead},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.RoleAdmin: {
|
2025-01-29 20:56:03 -05:00
|
|
|
Description: "A superuser",
|
2025-01-22 10:39:23 -05:00
|
|
|
Parents: []string{entities.RoleUser},
|
2025-01-20 20:28:25 -05:00
|
|
|
Grants: restrict.GrantsMap{
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.ResourceIncident: {
|
2025-01-29 20:37:17 -05:00
|
|
|
&restrict.Permission{Action: entities.ActionRead},
|
2025-01-22 10:39:23 -05:00
|
|
|
&restrict.Permission{Action: entities.ActionUpdate},
|
|
|
|
&restrict.Permission{Action: entities.ActionDelete},
|
|
|
|
&restrict.Permission{Action: entities.ActionShare},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.ResourceCall: {
|
2025-01-29 20:37:17 -05:00
|
|
|
&restrict.Permission{Action: entities.ActionRead},
|
2025-01-22 10:39:23 -05:00
|
|
|
&restrict.Permission{Action: entities.ActionUpdate},
|
|
|
|
&restrict.Permission{Action: entities.ActionDelete},
|
|
|
|
&restrict.Permission{Action: entities.ActionShare},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.ResourceTalkgroup: {
|
2025-01-29 20:37:17 -05:00
|
|
|
&restrict.Permission{Action: entities.ActionRead},
|
|
|
|
&restrict.Permission{Action: entities.ActionUpdate},
|
|
|
|
&restrict.Permission{Action: entities.ActionCreate},
|
|
|
|
&restrict.Permission{Action: entities.ActionDelete},
|
|
|
|
},
|
|
|
|
entities.ResourceShare: {
|
|
|
|
&restrict.Permission{Action: entities.ActionRead},
|
2025-01-22 10:39:23 -05:00
|
|
|
&restrict.Permission{Action: entities.ActionUpdate},
|
|
|
|
&restrict.Permission{Action: entities.ActionCreate},
|
|
|
|
&restrict.Permission{Action: entities.ActionDelete},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.RoleSystem: {
|
2025-01-29 20:56:03 -05:00
|
|
|
Description: "A system service",
|
2025-01-29 20:37:17 -05:00
|
|
|
Parents: []string{entities.RoleAdmin},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.RolePublic: {
|
2025-01-20 20:28:25 -05:00
|
|
|
/*
|
|
|
|
Grants: restrict.GrantsMap{
|
2025-01-22 10:39:23 -05:00
|
|
|
entities.ResourceShare: {
|
|
|
|
&restrict.Permission{Action: entities.ActionRead},
|
2025-01-20 20:28:25 -05:00
|
|
|
},
|
|
|
|
},
|
|
|
|
*/
|
|
|
|
},
|
|
|
|
},
|
|
|
|
PermissionPresets: restrict.PermissionPresets{
|
|
|
|
PresetUpdateOwn: &restrict.Permission{
|
2025-01-22 10:39:23 -05:00
|
|
|
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{
|
2025-01-22 10:39:23 -05:00
|
|
|
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{
|
2025-01-22 10:39:23 -05:00
|
|
|
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{
|
2025-01-22 10:39:23 -05:00
|
|
|
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{
|
2025-01-22 10:39:23 -05:00
|
|
|
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{
|
2025-01-22 10:39:23 -05:00
|
|
|
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{
|
2025-01-22 10:39:23 -05:00
|
|
|
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{
|
2025-01-22 10:39:23 -05:00
|
|
|
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
|
|
|
},
|
|
|
|
}
|