@abhi1693/medusa-rbac 0.0.1 → 0.0.2
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/.medusa/server/src/admin/index.js +43 -25
- package/.medusa/server/src/admin/index.mjs +43 -25
- package/.medusa/server/src/admin/lib/access.d.ts +6 -3
- package/.medusa/server/src/admin/lib/access.js +1 -1
- package/.medusa/server/src/api/admin/access/me/route.js +3 -1
- package/.medusa/server/src/api/admin/access/permissions/route.js +4 -1
- package/.medusa/server/src/api/middlewares/enforce-admin-access.js +49 -61
- package/.medusa/server/src/index.d.ts +1 -0
- package/.medusa/server/src/index.js +2 -1
- package/.medusa/server/src/lib/access/config.d.ts +6 -0
- package/.medusa/server/src/lib/access/config.js +110 -14
- package/.medusa/server/src/lib/access/explain.d.ts +1 -1
- package/.medusa/server/src/lib/access/explain.js +3 -2
- package/.medusa/server/src/lib/access/immutable-config.d.ts +2 -0
- package/.medusa/server/src/lib/access/immutable-config.js +17 -0
- package/.medusa/server/src/lib/access/native-resources.d.ts +3 -0
- package/.medusa/server/src/lib/access/native-resources.js +444 -0
- package/.medusa/server/src/lib/access/permission-key.d.ts +1 -1
- package/.medusa/server/src/lib/access/permission-key.js +3 -2
- package/.medusa/server/src/lib/access/permissions.d.ts +7 -0
- package/.medusa/server/src/lib/access/permissions.js +15 -2
- package/.medusa/server/src/lib/access/policy.d.ts +12 -3
- package/.medusa/server/src/lib/access/policy.js +149 -264
- package/.medusa/server/src/lib/access/resources.d.ts +107 -0
- package/.medusa/server/src/lib/access/resources.js +363 -0
- package/.medusa/server/src/lib/access/route-facts.d.ts +24 -0
- package/.medusa/server/src/lib/access/route-facts.js +77 -0
- package/.medusa/server/src/lib/access/write-permissions.d.ts +2 -0
- package/.medusa/server/src/lib/access/write-permissions.js +40 -0
- package/.medusa/server/src/modules/access-control/service.d.ts +4 -0
- package/.medusa/server/src/modules/access-control/service.js +8 -3
- package/.medusa/server/src/resources.d.ts +2 -0
- package/.medusa/server/src/resources.js +18 -0
- package/README.md +71 -9
- package/package.json +11 -7
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.nativeResources = void 0;
|
|
7
|
+
exports.describeNative = describeNative;
|
|
8
|
+
const native_routes_json_1 = __importDefault(require("./native-routes.json"));
|
|
9
|
+
const route_facts_1 = require("./route-facts");
|
|
10
|
+
const resources_1 = require("./resources");
|
|
11
|
+
const write_permissions_1 = require("./write-permissions");
|
|
12
|
+
const immutable_config_1 = require("./immutable-config");
|
|
13
|
+
const read = (...permissions) => ({ permissions });
|
|
14
|
+
const commerce = {
|
|
15
|
+
products: {
|
|
16
|
+
read: read("products.view", "prices.view"),
|
|
17
|
+
write: read("products.edit"),
|
|
18
|
+
},
|
|
19
|
+
"product-variants": {
|
|
20
|
+
read: read("products.view", "prices.view"),
|
|
21
|
+
write: read("products.edit"),
|
|
22
|
+
},
|
|
23
|
+
"product-categories": {
|
|
24
|
+
read: read("categories.view"),
|
|
25
|
+
write: read("categories.manage"),
|
|
26
|
+
},
|
|
27
|
+
collections: {
|
|
28
|
+
read: read("collections.view"),
|
|
29
|
+
write: read("collections.manage"),
|
|
30
|
+
},
|
|
31
|
+
"product-types": {
|
|
32
|
+
read: read("products.view"),
|
|
33
|
+
write: read("product_options.manage"),
|
|
34
|
+
},
|
|
35
|
+
"product-tags": {
|
|
36
|
+
read: read("products.view"),
|
|
37
|
+
write: read("product_options.manage"),
|
|
38
|
+
},
|
|
39
|
+
"product-options": {
|
|
40
|
+
read: read("products.view"),
|
|
41
|
+
write: read("product_options.manage"),
|
|
42
|
+
},
|
|
43
|
+
"product-option-values": {
|
|
44
|
+
read: read("products.view"),
|
|
45
|
+
write: read("product_options.manage"),
|
|
46
|
+
},
|
|
47
|
+
"price-lists": { read: read("prices.view"), write: read("prices.edit") },
|
|
48
|
+
"price-preferences": {
|
|
49
|
+
read: read("prices.view"),
|
|
50
|
+
write: read("prices.edit"),
|
|
51
|
+
},
|
|
52
|
+
"inventory-items": {
|
|
53
|
+
read: read("inventory.view", "products.view", "prices.view", "stock_locations.view"),
|
|
54
|
+
write: read("inventory.adjust"),
|
|
55
|
+
},
|
|
56
|
+
"stock-locations": {
|
|
57
|
+
read: read("stock_locations.view"),
|
|
58
|
+
write: read("stock_locations.manage"),
|
|
59
|
+
},
|
|
60
|
+
reservations: {
|
|
61
|
+
read: read("inventory.view", "products.view", "prices.view"),
|
|
62
|
+
write: read("inventory.adjust"),
|
|
63
|
+
},
|
|
64
|
+
orders: {
|
|
65
|
+
read: read("orders.view"),
|
|
66
|
+
write: read("orders.manage"),
|
|
67
|
+
},
|
|
68
|
+
"order-changes": {
|
|
69
|
+
read: read("orders.view"),
|
|
70
|
+
write: read("orders.manage"),
|
|
71
|
+
},
|
|
72
|
+
"draft-orders": {
|
|
73
|
+
read: read("orders.view"),
|
|
74
|
+
write: read("orders.manage"),
|
|
75
|
+
},
|
|
76
|
+
returns: {
|
|
77
|
+
read: read("orders.view"),
|
|
78
|
+
write: read("orders.manage"),
|
|
79
|
+
},
|
|
80
|
+
exchanges: {
|
|
81
|
+
read: read("orders.view"),
|
|
82
|
+
write: read("orders.manage"),
|
|
83
|
+
},
|
|
84
|
+
claims: {
|
|
85
|
+
read: read("orders.view"),
|
|
86
|
+
write: read("orders.manage"),
|
|
87
|
+
},
|
|
88
|
+
fulfillments: { read: read("orders.view"), write: read("orders.manage") },
|
|
89
|
+
customers: { read: read("customers.view"), write: read("customers.manage") },
|
|
90
|
+
"customer-groups": {
|
|
91
|
+
read: read("customers.view"),
|
|
92
|
+
write: read("customers.manage"),
|
|
93
|
+
},
|
|
94
|
+
payments: { read: read("payments.view"), write: read("payments.capture") },
|
|
95
|
+
"payment-collections": {
|
|
96
|
+
read: read("payments.view"),
|
|
97
|
+
write: read("payments.capture"),
|
|
98
|
+
},
|
|
99
|
+
promotions: {
|
|
100
|
+
read: read("promotions.view"),
|
|
101
|
+
write: read("promotions.manage"),
|
|
102
|
+
},
|
|
103
|
+
campaigns: {
|
|
104
|
+
read: read("promotions.view"),
|
|
105
|
+
write: read("promotions.manage"),
|
|
106
|
+
},
|
|
107
|
+
uploads: { read: read("media.manage"), write: read("media.manage") },
|
|
108
|
+
};
|
|
109
|
+
const settings = [
|
|
110
|
+
"stores",
|
|
111
|
+
"regions",
|
|
112
|
+
"currencies",
|
|
113
|
+
"countries",
|
|
114
|
+
"sales-channels",
|
|
115
|
+
"shipping-profiles",
|
|
116
|
+
"shipping-options",
|
|
117
|
+
"shipping-option-types",
|
|
118
|
+
"fulfillment-providers",
|
|
119
|
+
"fulfillment-sets",
|
|
120
|
+
"tax-regions",
|
|
121
|
+
"tax-rates",
|
|
122
|
+
"tax-providers",
|
|
123
|
+
"return-reasons",
|
|
124
|
+
"refund-reasons",
|
|
125
|
+
"locales",
|
|
126
|
+
"translations",
|
|
127
|
+
];
|
|
128
|
+
for (const resource of settings)
|
|
129
|
+
commerce[resource] = {
|
|
130
|
+
read: read("settings.view"),
|
|
131
|
+
write: read("settings.manage"),
|
|
132
|
+
};
|
|
133
|
+
// Reviewed structural vocabulary, independent of request URLs. Unrecognized
|
|
134
|
+
// members stay unclassified when a future native inventory adds a command.
|
|
135
|
+
const members = {
|
|
136
|
+
campaigns: "promotions",
|
|
137
|
+
claims: "cancel claim-items inbound items outbound request shipping-method",
|
|
138
|
+
collections: "products",
|
|
139
|
+
"customer-groups": "customers",
|
|
140
|
+
customers: "addresses customer-groups export",
|
|
141
|
+
"draft-orders": "confirm convert-to-order edit item items method promotions request shipping-methods",
|
|
142
|
+
exchanges: "cancel inbound items outbound request shipping-method",
|
|
143
|
+
"fulfillment-providers": "options",
|
|
144
|
+
"fulfillment-sets": "service-zones",
|
|
145
|
+
fulfillments: "cancel shipment",
|
|
146
|
+
"inventory-items": "batch export location-levels",
|
|
147
|
+
orders: "archive authorize cancel changes complete credit-lines export fulfillments guest line-items mark-as-delivered payment-sessions preview shipments shipping-options transfer",
|
|
148
|
+
"payment-collections": "mark-as-paid payment-sessions",
|
|
149
|
+
payments: "capture payment-providers refund",
|
|
150
|
+
"price-lists": "batch prices products",
|
|
151
|
+
"product-categories": "products",
|
|
152
|
+
"product-options": "values",
|
|
153
|
+
products: "batch confirm export images import imports inventory-items options variants",
|
|
154
|
+
promotions: "batch buy-rules rule-attribute-options rule-value-options rules target-rules",
|
|
155
|
+
returns: "cancel confirm dismiss-items receive receive-items request request-items shipping-method",
|
|
156
|
+
"sales-channels": "products",
|
|
157
|
+
"shipping-options": "batch rules",
|
|
158
|
+
"stock-locations": "fulfillment-providers fulfillment-sets sales-channels",
|
|
159
|
+
"tax-rates": "rules",
|
|
160
|
+
translations: "batch entities settings statistics",
|
|
161
|
+
uploads: "presigned-urls",
|
|
162
|
+
users: "auth-providers me reset-password roles",
|
|
163
|
+
invites: "accept resend",
|
|
164
|
+
};
|
|
165
|
+
const commands = {
|
|
166
|
+
products: { import: "import", imports: "import", export: "export" },
|
|
167
|
+
"product-variants": { import: "import", imports: "import", export: "export" },
|
|
168
|
+
orders: { cancel: "cancel", export: "denied" },
|
|
169
|
+
"draft-orders": { cancel: "cancel" },
|
|
170
|
+
payments: { refund: "refund" },
|
|
171
|
+
customers: { export: "denied" },
|
|
172
|
+
"inventory-items": { export: "denied" },
|
|
173
|
+
};
|
|
174
|
+
const personalFields = ["id", "email", "first_name", "last_name", "avatar_url"];
|
|
175
|
+
const editableProfileFields = ["first_name", "last_name", "avatar_url"];
|
|
176
|
+
function addAction(profile, facts, action) {
|
|
177
|
+
let node = profile;
|
|
178
|
+
for (const segment of facts.segments) {
|
|
179
|
+
if (segment.kind === "literal") {
|
|
180
|
+
const children = (node.children ||= {});
|
|
181
|
+
node = children[segment.value] ||= {};
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
node.item ||= { parameter: segment.name, profile: {} };
|
|
185
|
+
if (node.item.parameter !== segment.name)
|
|
186
|
+
throw new Error("Conflicting native parameter grammar");
|
|
187
|
+
node = node.item.profile;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
node.actions ||= {};
|
|
191
|
+
node.actions[facts.method] = action;
|
|
192
|
+
}
|
|
193
|
+
function compileNative(resource, policies) {
|
|
194
|
+
const profile = {};
|
|
195
|
+
const product = ["products", "product-variants"].includes(resource);
|
|
196
|
+
const operations = {
|
|
197
|
+
read: policies.read,
|
|
198
|
+
write: policies.write,
|
|
199
|
+
create: read("products.create"),
|
|
200
|
+
delete: read("products.delete"),
|
|
201
|
+
import: read("products.import", "products.create", "products.edit", "prices.edit"),
|
|
202
|
+
export: read("products.view", "prices.view", "products.export"),
|
|
203
|
+
refund: read("refunds.issue"),
|
|
204
|
+
cancel: read("orders.cancel"),
|
|
205
|
+
bootstrap: { permissions: [], access: "authenticated" },
|
|
206
|
+
public: { permissions: [], access: "public" },
|
|
207
|
+
};
|
|
208
|
+
for (const route of native_routes_json_1.default.filter((route) => route.path.split("/")[2] === resource)) {
|
|
209
|
+
for (const method of route.methods) {
|
|
210
|
+
const facts = (0, route_facts_1.matchRoute)([route], method, route.path.replace(/:[^/]+/g, "opaque"));
|
|
211
|
+
const literals = facts.segments
|
|
212
|
+
.filter((segment) => segment.kind === "literal")
|
|
213
|
+
.map((segment) => segment.value);
|
|
214
|
+
if (literals.some((literal) => !(members[resource] || "").split(" ").includes(literal)))
|
|
215
|
+
continue;
|
|
216
|
+
const command = literals
|
|
217
|
+
.map((literal) => commands[resource]?.[literal])
|
|
218
|
+
.find(Boolean);
|
|
219
|
+
if (command === "denied")
|
|
220
|
+
continue;
|
|
221
|
+
let operation = command || (method === "GET" ? "read" : "write");
|
|
222
|
+
if (product && !command) {
|
|
223
|
+
if (method === "DELETE")
|
|
224
|
+
operation = "delete";
|
|
225
|
+
if (resource === "products" &&
|
|
226
|
+
method === "POST" &&
|
|
227
|
+
!facts.segments.length)
|
|
228
|
+
operation = "create";
|
|
229
|
+
}
|
|
230
|
+
const variantCollection = facts.segments.length === 2 &&
|
|
231
|
+
facts.segments[0].kind === "parameter" &&
|
|
232
|
+
facts.segments[1].kind === "literal" &&
|
|
233
|
+
facts.segments[1].value === "variants";
|
|
234
|
+
const variantItem = facts.segments.length === 3 &&
|
|
235
|
+
facts.segments[2].kind === "parameter" &&
|
|
236
|
+
facts.segments[1].kind === "literal" &&
|
|
237
|
+
facts.segments[1].value === "variants";
|
|
238
|
+
const action = {
|
|
239
|
+
operation,
|
|
240
|
+
fieldResource: resource === "products" && (variantCollection || variantItem)
|
|
241
|
+
? "product-variants"
|
|
242
|
+
: resource,
|
|
243
|
+
};
|
|
244
|
+
if (product && method !== "GET")
|
|
245
|
+
action.payload = (request) => (0, write_permissions_1.additionalWritePermissions)(request.body, method === "POST" && (operation === "create" || variantCollection));
|
|
246
|
+
if (resource === "stores" && method === "GET" && !facts.segments.length) {
|
|
247
|
+
action.operation = "bootstrap";
|
|
248
|
+
action.fallbackFields = {
|
|
249
|
+
permissions: ["settings.view"],
|
|
250
|
+
fields: ["id", "name"],
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
addAction(profile, facts, action);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
key: resource,
|
|
258
|
+
root: resource,
|
|
259
|
+
actorTypes: ["user"],
|
|
260
|
+
profile,
|
|
261
|
+
operations,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function accountResource(root) {
|
|
265
|
+
const profile = {};
|
|
266
|
+
const operations = {
|
|
267
|
+
read: { permissions: ["staff.view"], superuser: true },
|
|
268
|
+
manage: { permissions: [], superuser: true },
|
|
269
|
+
self: { permissions: [], access: "authenticated" },
|
|
270
|
+
public: { permissions: [], access: "public" },
|
|
271
|
+
};
|
|
272
|
+
for (const route of native_routes_json_1.default.filter((route) => route.path.split("/")[2] === root)) {
|
|
273
|
+
for (const method of route.methods) {
|
|
274
|
+
const facts = (0, route_facts_1.matchRoute)([route], method, route.path.replace(/:[^/]+/g, "opaque"));
|
|
275
|
+
const action = {
|
|
276
|
+
operation: root === "users" && method === "GET" ? "read" : "manage",
|
|
277
|
+
};
|
|
278
|
+
if (root === "users") {
|
|
279
|
+
const item = facts.segments.length === 1 && facts.segments[0].kind === "parameter";
|
|
280
|
+
const reset = facts.segments.length === 2 &&
|
|
281
|
+
facts.segments[0].kind === "parameter" &&
|
|
282
|
+
facts.segments[1].kind === "literal" &&
|
|
283
|
+
facts.segments[1].value === "reset-password";
|
|
284
|
+
if (method !== "GET" &&
|
|
285
|
+
!((method === "POST" && (item || reset)) ||
|
|
286
|
+
(method === "DELETE" && item)))
|
|
287
|
+
continue;
|
|
288
|
+
if (method === "POST" && item)
|
|
289
|
+
action.self = {
|
|
290
|
+
parameter: "id",
|
|
291
|
+
fields: editableProfileFields,
|
|
292
|
+
responseFields: personalFields,
|
|
293
|
+
};
|
|
294
|
+
if (method === "DELETE")
|
|
295
|
+
action.redirect = {
|
|
296
|
+
destination: "/admin/access/staff/:id",
|
|
297
|
+
parameter: "id",
|
|
298
|
+
};
|
|
299
|
+
if (method === "GET" &&
|
|
300
|
+
facts.segments.length === 1 &&
|
|
301
|
+
facts.segments[0].kind === "literal" &&
|
|
302
|
+
facts.segments[0].value === "me") {
|
|
303
|
+
action.operation = "self";
|
|
304
|
+
action.forceFields = personalFields;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
else if (method === "POST" &&
|
|
308
|
+
facts.segments.length === 1 &&
|
|
309
|
+
facts.segments[0].kind === "literal" &&
|
|
310
|
+
facts.segments[0].value === "accept")
|
|
311
|
+
action.operation = "public";
|
|
312
|
+
addAction(profile, facts, action);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return { key: root, root, profile, operations, actorTypes: ["user"] };
|
|
316
|
+
}
|
|
317
|
+
const management = {
|
|
318
|
+
key: "access",
|
|
319
|
+
root: "access",
|
|
320
|
+
actorTypes: ["user"],
|
|
321
|
+
operations: {
|
|
322
|
+
self: { permissions: [], access: "authenticated" },
|
|
323
|
+
roles: read("roles.view"),
|
|
324
|
+
staff: read("staff.view"),
|
|
325
|
+
audit: read("audit.view"),
|
|
326
|
+
manage: { permissions: [], superuser: true },
|
|
327
|
+
},
|
|
328
|
+
profile: {
|
|
329
|
+
children: {
|
|
330
|
+
me: { actions: { GET: "self" } },
|
|
331
|
+
permissions: { actions: { GET: "roles" } },
|
|
332
|
+
audit: { actions: { GET: "audit" } },
|
|
333
|
+
roles: {
|
|
334
|
+
actions: { GET: "roles", POST: "manage" },
|
|
335
|
+
item: {
|
|
336
|
+
parameter: "id",
|
|
337
|
+
profile: {
|
|
338
|
+
actions: { GET: "roles", POST: "manage", DELETE: "manage" },
|
|
339
|
+
},
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
staff: {
|
|
343
|
+
actions: { GET: "staff" },
|
|
344
|
+
item: {
|
|
345
|
+
parameter: "id",
|
|
346
|
+
profile: {
|
|
347
|
+
actions: { GET: "staff", POST: "manage", DELETE: "manage" },
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
},
|
|
351
|
+
invites: {
|
|
352
|
+
actions: { GET: "manage", POST: "manage" },
|
|
353
|
+
item: { parameter: "id", profile: { actions: { DELETE: "manage" } } },
|
|
354
|
+
},
|
|
355
|
+
evaluate: { actions: { POST: "manage" } },
|
|
356
|
+
actors: {
|
|
357
|
+
item: {
|
|
358
|
+
parameter: "actor_type",
|
|
359
|
+
profile: {
|
|
360
|
+
actions: { GET: "manage" },
|
|
361
|
+
item: {
|
|
362
|
+
parameter: "id",
|
|
363
|
+
profile: { actions: { GET: "manage", POST: "manage" } },
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
const layouts = {
|
|
372
|
+
key: "layouts",
|
|
373
|
+
root: "layouts",
|
|
374
|
+
actorTypes: ["user"],
|
|
375
|
+
profile: (0, resources_1.actorOwnedPreferences)({
|
|
376
|
+
parameter: "zone",
|
|
377
|
+
member: "configuration",
|
|
378
|
+
list: "configurations",
|
|
379
|
+
sharedField: "is_default",
|
|
380
|
+
}),
|
|
381
|
+
operations: {
|
|
382
|
+
read: read(),
|
|
383
|
+
save: {
|
|
384
|
+
permissions: [],
|
|
385
|
+
scopes: { personal: [], shared: ["settings.manage"] },
|
|
386
|
+
},
|
|
387
|
+
reset: { permissions: [], scopes: { personal: [] } },
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
exports.nativeResources = (0, immutable_config_1.immutableConfig)([
|
|
391
|
+
...Object.entries(commerce).map(([root, policies]) => compileNative(root, policies)),
|
|
392
|
+
accountResource("users"),
|
|
393
|
+
accountResource("invites"),
|
|
394
|
+
management,
|
|
395
|
+
layouts,
|
|
396
|
+
...["plugins", "feature-flags"].map((root) => ({
|
|
397
|
+
key: root,
|
|
398
|
+
root,
|
|
399
|
+
actorTypes: ["user"],
|
|
400
|
+
profile: { actions: { GET: "read" } },
|
|
401
|
+
operations: {
|
|
402
|
+
read: {
|
|
403
|
+
permissions: [],
|
|
404
|
+
access: root === "feature-flags" ? "public" : "authenticated",
|
|
405
|
+
},
|
|
406
|
+
},
|
|
407
|
+
})),
|
|
408
|
+
].map((resource) => ({
|
|
409
|
+
...resource,
|
|
410
|
+
fieldRequirements: [
|
|
411
|
+
{ pattern: /inventory/, permissions: ["inventory.view"] },
|
|
412
|
+
...(resource.root === "orders"
|
|
413
|
+
? [
|
|
414
|
+
{
|
|
415
|
+
pattern: /(?:^|,)\s*[+-]?\*?payment_collections\.(?:payment_sessions|payments\.refunds\.refund_reason)\s*(?:,|$)/,
|
|
416
|
+
permissions: ["payments.view"],
|
|
417
|
+
},
|
|
418
|
+
]
|
|
419
|
+
: []),
|
|
420
|
+
...(resource.root === "stock-locations"
|
|
421
|
+
? [
|
|
422
|
+
{
|
|
423
|
+
pattern: /(?:^|,)\s*[+-]?\*?(?:fulfillment_sets|fulfillment_providers|sales_channels)(?:\.|\s*(?:,|$))/,
|
|
424
|
+
permissions: ["settings.view"],
|
|
425
|
+
},
|
|
426
|
+
]
|
|
427
|
+
: []),
|
|
428
|
+
],
|
|
429
|
+
})));
|
|
430
|
+
const nativeMatcher = (0, route_facts_1.createRouteMatcher)(native_routes_json_1.default);
|
|
431
|
+
const managementDefinition = exports.nativeResources.find((resource) => resource.key === "access");
|
|
432
|
+
const managementMatcher = (0, route_facts_1.createRouteMatcher)((0, resources_1.resourceRoutes)(managementDefinition));
|
|
433
|
+
function describeNative(method, url, body, actorId) {
|
|
434
|
+
const facts = nativeMatcher(method, url);
|
|
435
|
+
if (!facts) {
|
|
436
|
+
const custom = managementMatcher(method, url);
|
|
437
|
+
return custom
|
|
438
|
+
? (0, resources_1.describeResource)(managementDefinition, custom, body, actorId)
|
|
439
|
+
: null;
|
|
440
|
+
}
|
|
441
|
+
const resource = exports.nativeResources.find((resource) => resource.root === facts.root);
|
|
442
|
+
return resource ? (0, resources_1.describeResource)(resource, facts, body, actorId) : null;
|
|
443
|
+
}
|
|
444
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLXJlc291cmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWNjZXNzL25hdGl2ZS1yZXNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBK2ZBLHdDQWlCQztBQWhoQkQsOEVBQStDO0FBQy9DLCtDQUtzQjtBQUN0QiwyQ0FRb0I7QUFDcEIsMkRBQWdFO0FBQ2hFLHlEQUFvRDtBQUNwRCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsV0FBcUIsRUFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0FBQzlFLE1BQU0sUUFBUSxHQUdWO0lBQ0YsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO1FBQzFDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO0tBQzdCO0lBQ0Qsa0JBQWtCLEVBQUU7UUFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO1FBQzFDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO0tBQzdCO0lBQ0Qsb0JBQW9CLEVBQUU7UUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0tBQ2pDO0lBQ0QsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0tBQ2xDO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztLQUN0QztJQUNELGNBQWMsRUFBRTtRQUNkLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzNCLEtBQUssRUFBRSxJQUFJ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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AccessPrincipal } from "./permissions";
|
|
2
2
|
export declare function permissionKeyMatches(pattern: string, permission: string): boolean;
|
|
3
3
|
/** Navigation hint only. Request authorization must evaluate trusted server context. */
|
|
4
4
|
export declare function hasPermissionCandidate(principal: AccessPrincipal, permission: string): boolean;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.permissionKeyMatches = permissionKeyMatches;
|
|
4
4
|
exports.hasPermissionCandidate = hasPermissionCandidate;
|
|
5
|
+
const permissions_1 = require("./permissions");
|
|
5
6
|
function permissionKeyMatches(pattern, permission) {
|
|
6
7
|
return (pattern === permission ||
|
|
7
8
|
pattern === "*" ||
|
|
@@ -10,9 +11,9 @@ function permissionKeyMatches(pattern, permission) {
|
|
|
10
11
|
/** Navigation hint only. Request authorization must evaluate trusted server context. */
|
|
11
12
|
function hasPermissionCandidate(principal, permission) {
|
|
12
13
|
return (principal.active &&
|
|
13
|
-
(principal
|
|
14
|
+
((0, permissions_1.isSuperuser)(principal) ||
|
|
14
15
|
principal.permissions.includes(permission) ||
|
|
15
16
|
Boolean(principal.rules?.some((rule) => rule.effect === "allow" &&
|
|
16
17
|
permissionKeyMatches(rule.permission, permission)))));
|
|
17
18
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FjY2Vzcy9wZXJtaXNzaW9uLWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLG9EQU1DO0FBR0Qsd0RBZ0JDO0FBM0JELCtDQUFpRTtBQUVqRSxTQUFnQixvQkFBb0IsQ0FBQyxPQUFlLEVBQUUsVUFBa0I7SUFDdEUsT0FBTyxDQUNMLE9BQU8sS0FBSyxVQUFVO1FBQ3RCLE9BQU8sS0FBSyxHQUFHO1FBQ2YsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3hFLENBQUE7QUFDSCxDQUFDO0FBRUQsd0ZBQXdGO0FBQ3hGLFNBQWdCLHNCQUFzQixDQUNwQyxTQUEwQixFQUMxQixVQUFrQjtJQUVsQixPQUFPLENBQ0wsU0FBUyxDQUFDLE1BQU07UUFDaEIsQ0FBQyxJQUFBLHlCQUFXLEVBQUMsU0FBUyxDQUFDO1lBQ3JCLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUMxQyxPQUFPLENBQ0wsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQ25CLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDUCxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU87Z0JBQ3ZCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQ3BELENBQ0YsQ0FBQyxDQUNMLENBQUE7QUFDSCxDQUFDIn0=
|
|
@@ -12,3 +12,10 @@ export type AccessPrincipal = {
|
|
|
12
12
|
permissions: Permission[];
|
|
13
13
|
rules?: PermissionRule[];
|
|
14
14
|
};
|
|
15
|
+
/** Elevated authority applies only to an active native staff principal. */
|
|
16
|
+
export declare function isSuperuser(principal: AccessPrincipal): boolean;
|
|
17
|
+
export declare const SUPERUSER_AUTHORITY: Readonly<{
|
|
18
|
+
scope: "all_admin_operations";
|
|
19
|
+
description: "An active native staff account with the Superuser role can access all registered Admin pages and operations, including publishable API keys, secret API keys, workflows and plugin routes without a permission mapping. All permissions below are included, along with future permissions. Native authentication, validation and account safety protections still apply.";
|
|
20
|
+
}>;
|
|
21
|
+
export type SuperuserAuthority = typeof SUPERUSER_AUTHORITY;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PERMISSION_IDS = exports.PERMISSIONS = void 0;
|
|
3
|
+
exports.SUPERUSER_AUTHORITY = exports.PERMISSION_IDS = exports.PERMISSIONS = void 0;
|
|
4
4
|
exports.validatePermissions = validatePermissions;
|
|
5
|
+
exports.isSuperuser = isSuperuser;
|
|
5
6
|
exports.PERMISSIONS = [
|
|
6
7
|
["staff.view", "View staff", "Access"],
|
|
7
8
|
["roles.view", "View roles", "Access"],
|
|
@@ -47,4 +48,16 @@ function validatePermissions(values, ids = exports.PERMISSION_IDS) {
|
|
|
47
48
|
}
|
|
48
49
|
return [...new Set(values)];
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
+
/** Elevated authority applies only to an active native staff principal. */
|
|
52
|
+
function isSuperuser(principal) {
|
|
53
|
+
return (principal.actor_type === "user" &&
|
|
54
|
+
principal.active &&
|
|
55
|
+
principal.is_superuser);
|
|
56
|
+
}
|
|
57
|
+
// Describes authority beyond the finite permission catalog without inventing
|
|
58
|
+
// grant identifiers for native routes that ordinary roles cannot access.
|
|
59
|
+
exports.SUPERUSER_AUTHORITY = Object.freeze({
|
|
60
|
+
scope: "all_admin_operations",
|
|
61
|
+
description: "An active native staff account with the Superuser role can access all registered Admin pages and operations, including publishable API keys, secret API keys, workflows and plugin routes without a permission mapping. All permissions below are included, along with future permissions. Native authentication, validation and account safety protections still apply.",
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FjY2Vzcy9wZXJtaXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEyQ0Esa0RBY0M7QUFhRCxrQ0FNQztBQTNFWSxRQUFBLFdBQVcsR0FBRztJQUN6QixDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDO0lBQ3RDLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUM7SUFDdEMsQ0FBQyxZQUFZLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxDQUFDO0lBQ3JELENBQUMsZUFBZSxFQUFFLDRCQUE0QixFQUFFLFNBQVMsQ0FBQztJQUMxRCxDQUFDLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsQ0FBQztJQUN2RCxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDO0lBQzdDLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxDQUFDO0lBQ25ELENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0lBQ2pELENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0lBQ2pELENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0lBQ2pELENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUM7SUFDekMsQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQztJQUMzQyxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztJQUNqRCxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLFNBQVMsQ0FBQztJQUNyRCxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQztJQUNuRCxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLFNBQVMsQ0FBQztJQUN2RCxDQUFDLHdCQUF3QixFQUFF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
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import { type PermissionContext } from "./config";
|
|
2
|
-
import type
|
|
2
|
+
import { type Permission, type AccessPrincipal } from "./permissions";
|
|
3
|
+
export { additionalWritePermissions } from "./write-permissions";
|
|
3
4
|
export type Policy = {
|
|
4
5
|
permissions: Permission[];
|
|
5
6
|
superuser?: boolean;
|
|
6
7
|
};
|
|
7
8
|
export declare function normalizedPath(url: string): string | null;
|
|
9
|
+
/** Structural inspection; request body, scope and payload grants require resolveRequest. */
|
|
8
10
|
export declare function policyFor(method: string, path: string): Policy | null;
|
|
9
11
|
export declare function isBootstrapRead(method: string, path: string): boolean;
|
|
10
12
|
export declare function isSelfProfileUpdate(method: string, path: string, userId: string, body: unknown): boolean;
|
|
11
13
|
export declare function can(principal: AccessPrincipal, policy: Policy, context?: PermissionContext): boolean;
|
|
12
|
-
|
|
13
|
-
export declare function
|
|
14
|
+
/** Dashboard's group picker only reads member IDs to disable existing choices. */
|
|
15
|
+
export declare function nativeFieldSelection<T>(resource: string, fields: T): T | string;
|
|
16
|
+
/** Native promotion rule picker hydrates a selected sales channel by ID. */
|
|
17
|
+
export declare function nativePromotionRuleValue(resource: string, params: Record<string, string>, query: {
|
|
18
|
+
id?: unknown;
|
|
19
|
+
value?: unknown;
|
|
20
|
+
limit?: unknown;
|
|
21
|
+
}): string | undefined;
|
|
22
|
+
export declare function validateFieldSelection(resource: string, fields: unknown, override?: readonly string[]): boolean;
|