@objectstack/platform-objects 6.5.1 → 6.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/apps/index.d.mts +14 -0
- package/dist/apps/index.d.ts +14 -0
- package/dist/identity/index.d.mts +110 -1
- package/dist/identity/index.d.ts +110 -1
- package/dist/identity/index.js +120 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/index.mjs +120 -1
- package/dist/identity/index.mjs.map +1 -1
- package/dist/index.js +255 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +255 -1
- package/dist/index.mjs.map +1 -1
- package/dist/security/index.d.mts +150 -0
- package/dist/security/index.d.ts +150 -0
- package/dist/security/index.js +135 -0
- package/dist/security/index.js.map +1 -1
- package/dist/security/index.mjs +135 -0
- package/dist/security/index.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -688,6 +688,88 @@ declare const SysRole: Omit<{
|
|
|
688
688
|
readonly displayNameField: "label";
|
|
689
689
|
readonly titleFormat: "{label}";
|
|
690
690
|
readonly compactLayout: ["label", "name", "active", "is_default"];
|
|
691
|
+
readonly actions: [{
|
|
692
|
+
readonly name: "activate_role";
|
|
693
|
+
readonly label: "Activate Role";
|
|
694
|
+
readonly icon: "circle-check";
|
|
695
|
+
readonly variant: "secondary";
|
|
696
|
+
readonly mode: "custom";
|
|
697
|
+
readonly locations: ["list_item", "record_header"];
|
|
698
|
+
readonly type: "api";
|
|
699
|
+
readonly method: "PATCH";
|
|
700
|
+
readonly target: "/api/v1/data/sys_role/{id}";
|
|
701
|
+
readonly bodyExtra: {
|
|
702
|
+
readonly active: true;
|
|
703
|
+
};
|
|
704
|
+
readonly successMessage: "Role activated";
|
|
705
|
+
readonly refreshAfter: true;
|
|
706
|
+
}, {
|
|
707
|
+
readonly name: "deactivate_role";
|
|
708
|
+
readonly label: "Deactivate Role";
|
|
709
|
+
readonly icon: "circle-off";
|
|
710
|
+
readonly variant: "danger";
|
|
711
|
+
readonly mode: "custom";
|
|
712
|
+
readonly locations: ["list_item", "record_header"];
|
|
713
|
+
readonly type: "api";
|
|
714
|
+
readonly method: "PATCH";
|
|
715
|
+
readonly target: "/api/v1/data/sys_role/{id}";
|
|
716
|
+
readonly bodyExtra: {
|
|
717
|
+
readonly active: false;
|
|
718
|
+
};
|
|
719
|
+
readonly confirmText: "Deactivate this role? Users with the role keep their assignment but the role stops granting permissions until re-activated.";
|
|
720
|
+
readonly successMessage: "Role deactivated";
|
|
721
|
+
readonly refreshAfter: true;
|
|
722
|
+
}, {
|
|
723
|
+
readonly name: "set_default_role";
|
|
724
|
+
readonly label: "Set as Default";
|
|
725
|
+
readonly icon: "star";
|
|
726
|
+
readonly variant: "secondary";
|
|
727
|
+
readonly mode: "custom";
|
|
728
|
+
readonly locations: ["list_item", "record_header"];
|
|
729
|
+
readonly type: "api";
|
|
730
|
+
readonly method: "PATCH";
|
|
731
|
+
readonly target: "/api/v1/data/sys_role/{id}";
|
|
732
|
+
readonly bodyExtra: {
|
|
733
|
+
readonly is_default: true;
|
|
734
|
+
};
|
|
735
|
+
readonly confirmText: "Make this the default role for new users? Existing users are unaffected.";
|
|
736
|
+
readonly successMessage: "Default role updated";
|
|
737
|
+
readonly refreshAfter: true;
|
|
738
|
+
}, {
|
|
739
|
+
readonly name: "clone_role";
|
|
740
|
+
readonly label: "Clone Role";
|
|
741
|
+
readonly icon: "copy";
|
|
742
|
+
readonly variant: "secondary";
|
|
743
|
+
readonly mode: "custom";
|
|
744
|
+
readonly locations: ["list_item", "record_header"];
|
|
745
|
+
readonly type: "api";
|
|
746
|
+
readonly method: "POST";
|
|
747
|
+
readonly target: "/api/v1/data/sys_role";
|
|
748
|
+
readonly bodyExtra: {
|
|
749
|
+
readonly is_default: false;
|
|
750
|
+
readonly active: true;
|
|
751
|
+
};
|
|
752
|
+
readonly successMessage: "Role cloned";
|
|
753
|
+
readonly refreshAfter: true;
|
|
754
|
+
readonly params: [{
|
|
755
|
+
readonly name: "label";
|
|
756
|
+
readonly label: "New Display Name";
|
|
757
|
+
readonly type: "text";
|
|
758
|
+
readonly required: true;
|
|
759
|
+
}, {
|
|
760
|
+
readonly name: "name";
|
|
761
|
+
readonly label: "New API Name";
|
|
762
|
+
readonly type: "text";
|
|
763
|
+
readonly required: true;
|
|
764
|
+
readonly helpText: "Unique snake_case machine name";
|
|
765
|
+
}, {
|
|
766
|
+
readonly field: "description";
|
|
767
|
+
readonly defaultFromRow: true;
|
|
768
|
+
}, {
|
|
769
|
+
readonly field: "permissions";
|
|
770
|
+
readonly defaultFromRow: true;
|
|
771
|
+
}];
|
|
772
|
+
}];
|
|
691
773
|
readonly listViews: {
|
|
692
774
|
readonly active: {
|
|
693
775
|
readonly type: "grid";
|
|
@@ -3052,6 +3134,74 @@ declare const SysPermissionSet: Omit<{
|
|
|
3052
3134
|
readonly displayNameField: "label";
|
|
3053
3135
|
readonly titleFormat: "{label}";
|
|
3054
3136
|
readonly compactLayout: ["label", "name", "active"];
|
|
3137
|
+
readonly actions: [{
|
|
3138
|
+
readonly name: "activate_permission_set";
|
|
3139
|
+
readonly label: "Activate";
|
|
3140
|
+
readonly icon: "circle-check";
|
|
3141
|
+
readonly variant: "secondary";
|
|
3142
|
+
readonly mode: "custom";
|
|
3143
|
+
readonly locations: ["list_item", "record_header"];
|
|
3144
|
+
readonly type: "api";
|
|
3145
|
+
readonly method: "PATCH";
|
|
3146
|
+
readonly target: "/api/v1/data/sys_permission_set/{id}";
|
|
3147
|
+
readonly bodyExtra: {
|
|
3148
|
+
readonly active: true;
|
|
3149
|
+
};
|
|
3150
|
+
readonly successMessage: "Permission set activated";
|
|
3151
|
+
readonly refreshAfter: true;
|
|
3152
|
+
}, {
|
|
3153
|
+
readonly name: "deactivate_permission_set";
|
|
3154
|
+
readonly label: "Deactivate";
|
|
3155
|
+
readonly icon: "circle-off";
|
|
3156
|
+
readonly variant: "danger";
|
|
3157
|
+
readonly mode: "custom";
|
|
3158
|
+
readonly locations: ["list_item", "record_header"];
|
|
3159
|
+
readonly type: "api";
|
|
3160
|
+
readonly method: "PATCH";
|
|
3161
|
+
readonly target: "/api/v1/data/sys_permission_set/{id}";
|
|
3162
|
+
readonly bodyExtra: {
|
|
3163
|
+
readonly active: false;
|
|
3164
|
+
};
|
|
3165
|
+
readonly confirmText: "Deactivate this permission set? Existing assignments stay in place but stop granting access until re-activated.";
|
|
3166
|
+
readonly successMessage: "Permission set deactivated";
|
|
3167
|
+
readonly refreshAfter: true;
|
|
3168
|
+
}, {
|
|
3169
|
+
readonly name: "clone_permission_set";
|
|
3170
|
+
readonly label: "Clone";
|
|
3171
|
+
readonly icon: "copy";
|
|
3172
|
+
readonly variant: "secondary";
|
|
3173
|
+
readonly mode: "custom";
|
|
3174
|
+
readonly locations: ["list_item", "record_header"];
|
|
3175
|
+
readonly type: "api";
|
|
3176
|
+
readonly method: "POST";
|
|
3177
|
+
readonly target: "/api/v1/data/sys_permission_set";
|
|
3178
|
+
readonly bodyExtra: {
|
|
3179
|
+
readonly active: true;
|
|
3180
|
+
};
|
|
3181
|
+
readonly successMessage: "Permission set cloned";
|
|
3182
|
+
readonly refreshAfter: true;
|
|
3183
|
+
readonly params: [{
|
|
3184
|
+
readonly name: "label";
|
|
3185
|
+
readonly label: "New Display Name";
|
|
3186
|
+
readonly type: "text";
|
|
3187
|
+
readonly required: true;
|
|
3188
|
+
}, {
|
|
3189
|
+
readonly name: "name";
|
|
3190
|
+
readonly label: "New API Name";
|
|
3191
|
+
readonly type: "text";
|
|
3192
|
+
readonly required: true;
|
|
3193
|
+
readonly helpText: "Unique snake_case machine name";
|
|
3194
|
+
}, {
|
|
3195
|
+
readonly field: "description";
|
|
3196
|
+
readonly defaultFromRow: true;
|
|
3197
|
+
}, {
|
|
3198
|
+
readonly field: "object_permissions";
|
|
3199
|
+
readonly defaultFromRow: true;
|
|
3200
|
+
}, {
|
|
3201
|
+
readonly field: "field_permissions";
|
|
3202
|
+
readonly defaultFromRow: true;
|
|
3203
|
+
}];
|
|
3204
|
+
}];
|
|
3055
3205
|
readonly listViews: {
|
|
3056
3206
|
readonly active: {
|
|
3057
3207
|
readonly type: "grid";
|
package/dist/security/index.d.ts
CHANGED
|
@@ -688,6 +688,88 @@ declare const SysRole: Omit<{
|
|
|
688
688
|
readonly displayNameField: "label";
|
|
689
689
|
readonly titleFormat: "{label}";
|
|
690
690
|
readonly compactLayout: ["label", "name", "active", "is_default"];
|
|
691
|
+
readonly actions: [{
|
|
692
|
+
readonly name: "activate_role";
|
|
693
|
+
readonly label: "Activate Role";
|
|
694
|
+
readonly icon: "circle-check";
|
|
695
|
+
readonly variant: "secondary";
|
|
696
|
+
readonly mode: "custom";
|
|
697
|
+
readonly locations: ["list_item", "record_header"];
|
|
698
|
+
readonly type: "api";
|
|
699
|
+
readonly method: "PATCH";
|
|
700
|
+
readonly target: "/api/v1/data/sys_role/{id}";
|
|
701
|
+
readonly bodyExtra: {
|
|
702
|
+
readonly active: true;
|
|
703
|
+
};
|
|
704
|
+
readonly successMessage: "Role activated";
|
|
705
|
+
readonly refreshAfter: true;
|
|
706
|
+
}, {
|
|
707
|
+
readonly name: "deactivate_role";
|
|
708
|
+
readonly label: "Deactivate Role";
|
|
709
|
+
readonly icon: "circle-off";
|
|
710
|
+
readonly variant: "danger";
|
|
711
|
+
readonly mode: "custom";
|
|
712
|
+
readonly locations: ["list_item", "record_header"];
|
|
713
|
+
readonly type: "api";
|
|
714
|
+
readonly method: "PATCH";
|
|
715
|
+
readonly target: "/api/v1/data/sys_role/{id}";
|
|
716
|
+
readonly bodyExtra: {
|
|
717
|
+
readonly active: false;
|
|
718
|
+
};
|
|
719
|
+
readonly confirmText: "Deactivate this role? Users with the role keep their assignment but the role stops granting permissions until re-activated.";
|
|
720
|
+
readonly successMessage: "Role deactivated";
|
|
721
|
+
readonly refreshAfter: true;
|
|
722
|
+
}, {
|
|
723
|
+
readonly name: "set_default_role";
|
|
724
|
+
readonly label: "Set as Default";
|
|
725
|
+
readonly icon: "star";
|
|
726
|
+
readonly variant: "secondary";
|
|
727
|
+
readonly mode: "custom";
|
|
728
|
+
readonly locations: ["list_item", "record_header"];
|
|
729
|
+
readonly type: "api";
|
|
730
|
+
readonly method: "PATCH";
|
|
731
|
+
readonly target: "/api/v1/data/sys_role/{id}";
|
|
732
|
+
readonly bodyExtra: {
|
|
733
|
+
readonly is_default: true;
|
|
734
|
+
};
|
|
735
|
+
readonly confirmText: "Make this the default role for new users? Existing users are unaffected.";
|
|
736
|
+
readonly successMessage: "Default role updated";
|
|
737
|
+
readonly refreshAfter: true;
|
|
738
|
+
}, {
|
|
739
|
+
readonly name: "clone_role";
|
|
740
|
+
readonly label: "Clone Role";
|
|
741
|
+
readonly icon: "copy";
|
|
742
|
+
readonly variant: "secondary";
|
|
743
|
+
readonly mode: "custom";
|
|
744
|
+
readonly locations: ["list_item", "record_header"];
|
|
745
|
+
readonly type: "api";
|
|
746
|
+
readonly method: "POST";
|
|
747
|
+
readonly target: "/api/v1/data/sys_role";
|
|
748
|
+
readonly bodyExtra: {
|
|
749
|
+
readonly is_default: false;
|
|
750
|
+
readonly active: true;
|
|
751
|
+
};
|
|
752
|
+
readonly successMessage: "Role cloned";
|
|
753
|
+
readonly refreshAfter: true;
|
|
754
|
+
readonly params: [{
|
|
755
|
+
readonly name: "label";
|
|
756
|
+
readonly label: "New Display Name";
|
|
757
|
+
readonly type: "text";
|
|
758
|
+
readonly required: true;
|
|
759
|
+
}, {
|
|
760
|
+
readonly name: "name";
|
|
761
|
+
readonly label: "New API Name";
|
|
762
|
+
readonly type: "text";
|
|
763
|
+
readonly required: true;
|
|
764
|
+
readonly helpText: "Unique snake_case machine name";
|
|
765
|
+
}, {
|
|
766
|
+
readonly field: "description";
|
|
767
|
+
readonly defaultFromRow: true;
|
|
768
|
+
}, {
|
|
769
|
+
readonly field: "permissions";
|
|
770
|
+
readonly defaultFromRow: true;
|
|
771
|
+
}];
|
|
772
|
+
}];
|
|
691
773
|
readonly listViews: {
|
|
692
774
|
readonly active: {
|
|
693
775
|
readonly type: "grid";
|
|
@@ -3052,6 +3134,74 @@ declare const SysPermissionSet: Omit<{
|
|
|
3052
3134
|
readonly displayNameField: "label";
|
|
3053
3135
|
readonly titleFormat: "{label}";
|
|
3054
3136
|
readonly compactLayout: ["label", "name", "active"];
|
|
3137
|
+
readonly actions: [{
|
|
3138
|
+
readonly name: "activate_permission_set";
|
|
3139
|
+
readonly label: "Activate";
|
|
3140
|
+
readonly icon: "circle-check";
|
|
3141
|
+
readonly variant: "secondary";
|
|
3142
|
+
readonly mode: "custom";
|
|
3143
|
+
readonly locations: ["list_item", "record_header"];
|
|
3144
|
+
readonly type: "api";
|
|
3145
|
+
readonly method: "PATCH";
|
|
3146
|
+
readonly target: "/api/v1/data/sys_permission_set/{id}";
|
|
3147
|
+
readonly bodyExtra: {
|
|
3148
|
+
readonly active: true;
|
|
3149
|
+
};
|
|
3150
|
+
readonly successMessage: "Permission set activated";
|
|
3151
|
+
readonly refreshAfter: true;
|
|
3152
|
+
}, {
|
|
3153
|
+
readonly name: "deactivate_permission_set";
|
|
3154
|
+
readonly label: "Deactivate";
|
|
3155
|
+
readonly icon: "circle-off";
|
|
3156
|
+
readonly variant: "danger";
|
|
3157
|
+
readonly mode: "custom";
|
|
3158
|
+
readonly locations: ["list_item", "record_header"];
|
|
3159
|
+
readonly type: "api";
|
|
3160
|
+
readonly method: "PATCH";
|
|
3161
|
+
readonly target: "/api/v1/data/sys_permission_set/{id}";
|
|
3162
|
+
readonly bodyExtra: {
|
|
3163
|
+
readonly active: false;
|
|
3164
|
+
};
|
|
3165
|
+
readonly confirmText: "Deactivate this permission set? Existing assignments stay in place but stop granting access until re-activated.";
|
|
3166
|
+
readonly successMessage: "Permission set deactivated";
|
|
3167
|
+
readonly refreshAfter: true;
|
|
3168
|
+
}, {
|
|
3169
|
+
readonly name: "clone_permission_set";
|
|
3170
|
+
readonly label: "Clone";
|
|
3171
|
+
readonly icon: "copy";
|
|
3172
|
+
readonly variant: "secondary";
|
|
3173
|
+
readonly mode: "custom";
|
|
3174
|
+
readonly locations: ["list_item", "record_header"];
|
|
3175
|
+
readonly type: "api";
|
|
3176
|
+
readonly method: "POST";
|
|
3177
|
+
readonly target: "/api/v1/data/sys_permission_set";
|
|
3178
|
+
readonly bodyExtra: {
|
|
3179
|
+
readonly active: true;
|
|
3180
|
+
};
|
|
3181
|
+
readonly successMessage: "Permission set cloned";
|
|
3182
|
+
readonly refreshAfter: true;
|
|
3183
|
+
readonly params: [{
|
|
3184
|
+
readonly name: "label";
|
|
3185
|
+
readonly label: "New Display Name";
|
|
3186
|
+
readonly type: "text";
|
|
3187
|
+
readonly required: true;
|
|
3188
|
+
}, {
|
|
3189
|
+
readonly name: "name";
|
|
3190
|
+
readonly label: "New API Name";
|
|
3191
|
+
readonly type: "text";
|
|
3192
|
+
readonly required: true;
|
|
3193
|
+
readonly helpText: "Unique snake_case machine name";
|
|
3194
|
+
}, {
|
|
3195
|
+
readonly field: "description";
|
|
3196
|
+
readonly defaultFromRow: true;
|
|
3197
|
+
}, {
|
|
3198
|
+
readonly field: "object_permissions";
|
|
3199
|
+
readonly defaultFromRow: true;
|
|
3200
|
+
}, {
|
|
3201
|
+
readonly field: "field_permissions";
|
|
3202
|
+
readonly defaultFromRow: true;
|
|
3203
|
+
}];
|
|
3204
|
+
}];
|
|
3055
3205
|
readonly listViews: {
|
|
3056
3206
|
readonly active: {
|
|
3057
3207
|
readonly type: "grid";
|
package/dist/security/index.js
CHANGED
|
@@ -15,6 +15,83 @@ var SysRole = data.ObjectSchema.create({
|
|
|
15
15
|
displayNameField: "label",
|
|
16
16
|
titleFormat: "{label}",
|
|
17
17
|
compactLayout: ["label", "name", "active", "is_default"],
|
|
18
|
+
// Custom actions — system roles drive RBAC and are edited rarely but
|
|
19
|
+
// require the four high-frequency sysadmin affordances every IdP
|
|
20
|
+
// (Salesforce, ServiceNow, Okta) ships: activate/deactivate (lifecycle
|
|
21
|
+
// without losing assignments), mark default (auto-assign to new users),
|
|
22
|
+
// and clone (template for new roles). All operations hit the generic
|
|
23
|
+
// data CRUD endpoint exposed by `apiEnabled` — no custom server route
|
|
24
|
+
// required because `managedBy: 'config'` allows direct mutation.
|
|
25
|
+
actions: [
|
|
26
|
+
{
|
|
27
|
+
name: "activate_role",
|
|
28
|
+
label: "Activate Role",
|
|
29
|
+
icon: "circle-check",
|
|
30
|
+
variant: "secondary",
|
|
31
|
+
mode: "custom",
|
|
32
|
+
locations: ["list_item", "record_header"],
|
|
33
|
+
type: "api",
|
|
34
|
+
method: "PATCH",
|
|
35
|
+
target: "/api/v1/data/sys_role/{id}",
|
|
36
|
+
bodyExtra: { active: true },
|
|
37
|
+
successMessage: "Role activated",
|
|
38
|
+
refreshAfter: true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: "deactivate_role",
|
|
42
|
+
label: "Deactivate Role",
|
|
43
|
+
icon: "circle-off",
|
|
44
|
+
variant: "danger",
|
|
45
|
+
mode: "custom",
|
|
46
|
+
locations: ["list_item", "record_header"],
|
|
47
|
+
type: "api",
|
|
48
|
+
method: "PATCH",
|
|
49
|
+
target: "/api/v1/data/sys_role/{id}",
|
|
50
|
+
bodyExtra: { active: false },
|
|
51
|
+
confirmText: "Deactivate this role? Users with the role keep their assignment but the role stops granting permissions until re-activated.",
|
|
52
|
+
successMessage: "Role deactivated",
|
|
53
|
+
refreshAfter: true
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "set_default_role",
|
|
57
|
+
label: "Set as Default",
|
|
58
|
+
icon: "star",
|
|
59
|
+
variant: "secondary",
|
|
60
|
+
mode: "custom",
|
|
61
|
+
locations: ["list_item", "record_header"],
|
|
62
|
+
type: "api",
|
|
63
|
+
method: "PATCH",
|
|
64
|
+
target: "/api/v1/data/sys_role/{id}",
|
|
65
|
+
bodyExtra: { is_default: true },
|
|
66
|
+
confirmText: "Make this the default role for new users? Existing users are unaffected.",
|
|
67
|
+
successMessage: "Default role updated",
|
|
68
|
+
refreshAfter: true
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
// Clone — POST a new sys_role row pre-filled from the source. The
|
|
72
|
+
// dialog asks only for the new API name / label so the operator
|
|
73
|
+
// can rename atomically; permissions JSON is copied wholesale via
|
|
74
|
+
// defaultFromRow.
|
|
75
|
+
name: "clone_role",
|
|
76
|
+
label: "Clone Role",
|
|
77
|
+
icon: "copy",
|
|
78
|
+
variant: "secondary",
|
|
79
|
+
mode: "custom",
|
|
80
|
+
locations: ["list_item", "record_header"],
|
|
81
|
+
type: "api",
|
|
82
|
+
method: "POST",
|
|
83
|
+
target: "/api/v1/data/sys_role",
|
|
84
|
+
bodyExtra: { is_default: false, active: true },
|
|
85
|
+
successMessage: "Role cloned",
|
|
86
|
+
refreshAfter: true,
|
|
87
|
+
params: [
|
|
88
|
+
{ name: "label", label: "New Display Name", type: "text", required: true },
|
|
89
|
+
{ name: "name", label: "New API Name", type: "text", required: true, helpText: "Unique snake_case machine name" },
|
|
90
|
+
{ field: "description", defaultFromRow: true },
|
|
91
|
+
{ field: "permissions", defaultFromRow: true }
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
],
|
|
18
95
|
listViews: {
|
|
19
96
|
active: {
|
|
20
97
|
type: "grid",
|
|
@@ -141,6 +218,64 @@ var SysPermissionSet = data.ObjectSchema.create({
|
|
|
141
218
|
displayNameField: "label",
|
|
142
219
|
titleFormat: "{label}",
|
|
143
220
|
compactLayout: ["label", "name", "active"],
|
|
221
|
+
// Custom actions — permission sets are templates assigned to roles or
|
|
222
|
+
// users (via sys_role_permission_set / sys_user_permission_set). The
|
|
223
|
+
// sysadmin operations that don't live on the parent-detail tabs are
|
|
224
|
+
// lifecycle (activate/deactivate without losing assignments) and
|
|
225
|
+
// clone (build a new permset by tweaking an existing one). Both hit
|
|
226
|
+
// the generic data CRUD endpoint — managedBy: 'config' permits it.
|
|
227
|
+
actions: [
|
|
228
|
+
{
|
|
229
|
+
name: "activate_permission_set",
|
|
230
|
+
label: "Activate",
|
|
231
|
+
icon: "circle-check",
|
|
232
|
+
variant: "secondary",
|
|
233
|
+
mode: "custom",
|
|
234
|
+
locations: ["list_item", "record_header"],
|
|
235
|
+
type: "api",
|
|
236
|
+
method: "PATCH",
|
|
237
|
+
target: "/api/v1/data/sys_permission_set/{id}",
|
|
238
|
+
bodyExtra: { active: true },
|
|
239
|
+
successMessage: "Permission set activated",
|
|
240
|
+
refreshAfter: true
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: "deactivate_permission_set",
|
|
244
|
+
label: "Deactivate",
|
|
245
|
+
icon: "circle-off",
|
|
246
|
+
variant: "danger",
|
|
247
|
+
mode: "custom",
|
|
248
|
+
locations: ["list_item", "record_header"],
|
|
249
|
+
type: "api",
|
|
250
|
+
method: "PATCH",
|
|
251
|
+
target: "/api/v1/data/sys_permission_set/{id}",
|
|
252
|
+
bodyExtra: { active: false },
|
|
253
|
+
confirmText: "Deactivate this permission set? Existing assignments stay in place but stop granting access until re-activated.",
|
|
254
|
+
successMessage: "Permission set deactivated",
|
|
255
|
+
refreshAfter: true
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
name: "clone_permission_set",
|
|
259
|
+
label: "Clone",
|
|
260
|
+
icon: "copy",
|
|
261
|
+
variant: "secondary",
|
|
262
|
+
mode: "custom",
|
|
263
|
+
locations: ["list_item", "record_header"],
|
|
264
|
+
type: "api",
|
|
265
|
+
method: "POST",
|
|
266
|
+
target: "/api/v1/data/sys_permission_set",
|
|
267
|
+
bodyExtra: { active: true },
|
|
268
|
+
successMessage: "Permission set cloned",
|
|
269
|
+
refreshAfter: true,
|
|
270
|
+
params: [
|
|
271
|
+
{ name: "label", label: "New Display Name", type: "text", required: true },
|
|
272
|
+
{ name: "name", label: "New API Name", type: "text", required: true, helpText: "Unique snake_case machine name" },
|
|
273
|
+
{ field: "description", defaultFromRow: true },
|
|
274
|
+
{ field: "object_permissions", defaultFromRow: true },
|
|
275
|
+
{ field: "field_permissions", defaultFromRow: true }
|
|
276
|
+
]
|
|
277
|
+
}
|
|
278
|
+
],
|
|
144
279
|
listViews: {
|
|
145
280
|
active: {
|
|
146
281
|
type: "grid",
|