@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
|
@@ -3,20 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.enforceAdminAccess = enforceAdminAccess;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const access_control_1 = require("../../modules/access-control");
|
|
6
|
+
const route_facts_1 = require("../../lib/access/route-facts");
|
|
7
|
+
const native_resources_1 = require("../../lib/access/native-resources");
|
|
8
|
+
const resources_1 = require("../../lib/access/resources");
|
|
9
|
+
const permissions_1 = require("../../lib/access/permissions");
|
|
6
10
|
const policy_1 = require("../../lib/access/policy");
|
|
7
11
|
async function enforceAdminAccess(request, res, next) {
|
|
8
12
|
const req = request;
|
|
9
13
|
try {
|
|
10
|
-
|
|
11
|
-
if (!path)
|
|
14
|
+
if (!(0, route_facts_1.canonicalPath)(req.originalUrl))
|
|
12
15
|
return res
|
|
13
16
|
.status(403)
|
|
14
17
|
.json({ message: "Ambiguous Admin path is not allowed" });
|
|
15
|
-
|
|
16
|
-
if (path === "/admin/invites/accept" && req.method === "POST")
|
|
17
|
-
return next();
|
|
18
|
-
// Medusa exposes these static capability flags before login; preserve that contract.
|
|
19
|
-
if (path === "/admin/feature-flags" && ["GET", "HEAD"].includes(req.method))
|
|
18
|
+
if ((0, native_resources_1.describeNative)(req.method, req.originalUrl, req.body)?.access === "public")
|
|
20
19
|
return next();
|
|
21
20
|
const auth = req.auth_context;
|
|
22
21
|
if (auth?.actor_type !== "user" || !auth.actor_id)
|
|
@@ -24,69 +23,58 @@ async function enforceAdminAccess(request, res, next) {
|
|
|
24
23
|
.status(401)
|
|
25
24
|
.json({ message: "An authenticated staff account is required" });
|
|
26
25
|
res.setHeader("Cache-Control", "no-store");
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
await req.scope
|
|
27
|
+
.resolve(utils_1.Modules.USER)
|
|
28
|
+
.retrieveUser(auth.actor_id, { select: ["id"] });
|
|
29
29
|
const access = req.scope.resolve(access_control_1.ACCESS_CONTROL);
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
const principal = await access.principal(auth.actor_id);
|
|
31
|
+
const native = (0, native_resources_1.describeNative)(req.method, req.originalUrl, req.body, auth.actor_id);
|
|
32
|
+
// The native account lookup and current persisted assignment above establish
|
|
33
|
+
// Superuser authority. Keep guarded account-deletion redirects below, while
|
|
34
|
+
// native routes and validators own all other Superuser operations.
|
|
35
|
+
if ((0, permissions_1.isSuperuser)(principal) && !native?.action.redirect) {
|
|
36
|
+
const ruleValue = (0, policy_1.nativePromotionRuleValue)(native?.resource || "", native?.params || {}, req.query);
|
|
37
|
+
if (ruleValue !== undefined) {
|
|
38
|
+
req.query.value = ruleValue;
|
|
39
|
+
delete req.query.id;
|
|
40
|
+
}
|
|
32
41
|
return next();
|
|
33
42
|
}
|
|
34
|
-
const
|
|
35
|
-
const resource = path.split("/")[2];
|
|
36
|
-
const selfRead = (0, policy_1.isBootstrapRead)(req.method, path);
|
|
37
|
-
if (selfRead && path === "/admin/users/me")
|
|
38
|
-
req.query.fields = "id,email,first_name,last_name,avatar_url";
|
|
39
|
-
if (selfRead &&
|
|
40
|
-
path === "/admin/stores" &&
|
|
41
|
-
(!principal.active ||
|
|
42
|
-
!access.allows(principal, "settings.view", await access.permissionContext(req))))
|
|
43
|
-
req.query.fields = "id,name";
|
|
44
|
-
if (!selfRead && !principal.active)
|
|
45
|
-
return res
|
|
46
|
-
.status(403)
|
|
47
|
-
.json({ message: "Staff access is inactive or has not been assigned" });
|
|
48
|
-
const policy = access.policyFor(req.method, path);
|
|
43
|
+
const descriptor = await access.resolveRequest(req);
|
|
49
44
|
const context = await access.permissionContext(req);
|
|
50
45
|
const allowed = (permission) => access.allows(principal, permission, context);
|
|
51
|
-
if (!
|
|
52
|
-
(!selfRead &&
|
|
53
|
-
(!principal.active ||
|
|
54
|
-
(policy.superuser && !principal.is_superuser) ||
|
|
55
|
-
!policy.permissions.every(allowed))))
|
|
46
|
+
if (!descriptor || !(0, resources_1.operationAllowed)(principal, descriptor, allowed))
|
|
56
47
|
return res
|
|
57
48
|
.status(403)
|
|
58
49
|
.json({ message: "You do not have permission for this operation" });
|
|
59
|
-
if (
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
.status(403)
|
|
70
|
-
.json({ message: "Inventory access is required for these fields" });
|
|
71
|
-
}
|
|
72
|
-
if (["products", "product-variants"].includes(resource) &&
|
|
73
|
-
!["GET", "HEAD"].includes(req.method)) {
|
|
74
|
-
if ((0, policy_1.additionalWritePermissions)(req.body, req.method === "POST" &&
|
|
75
|
-
(path === "/admin/products" ||
|
|
76
|
-
/^\/admin\/products\/[^/]+\/variants$/.test(path))).some((p) => !allowed(p))) {
|
|
77
|
-
return res.status(403).json({
|
|
78
|
-
message: "Additional permissions are required for the changed fields",
|
|
79
|
-
});
|
|
50
|
+
if (descriptor.action.forceFields)
|
|
51
|
+
req.query.fields = descriptor.action.forceFields.join(",");
|
|
52
|
+
const fallback = descriptor.action.fallbackFields;
|
|
53
|
+
if (fallback && (!principal.active || !fallback.permissions.every(allowed)))
|
|
54
|
+
req.query.fields = fallback.fields.join(",");
|
|
55
|
+
if (["GET", "HEAD"].includes(req.method)) {
|
|
56
|
+
const ruleValue = (0, policy_1.nativePromotionRuleValue)(descriptor.resource, descriptor.params, req.query);
|
|
57
|
+
if (ruleValue !== undefined) {
|
|
58
|
+
req.query.value = ruleValue;
|
|
59
|
+
delete req.query.id;
|
|
80
60
|
}
|
|
61
|
+
const fields = (0, policy_1.nativeFieldSelection)(descriptor.fieldResource, req.query.fields);
|
|
62
|
+
if (fields !== req.query.fields)
|
|
63
|
+
req.query.fields = fields;
|
|
64
|
+
if (!(0, policy_1.validateFieldSelection)(descriptor.fieldResource, req.query.fields, descriptor.fields))
|
|
65
|
+
return res
|
|
66
|
+
.status(403)
|
|
67
|
+
.json({ message: "This field selection is not allowed" });
|
|
81
68
|
}
|
|
82
|
-
if (req.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
69
|
+
if (typeof req.query.fields === "string" &&
|
|
70
|
+
descriptor.fieldRequirements.some((requirement) => requirement.pattern.test(req.query.fields) &&
|
|
71
|
+
!requirement.permissions.every(allowed)))
|
|
72
|
+
return res.status(403).json({
|
|
73
|
+
message: "Additional permissions are required for these fields",
|
|
74
|
+
});
|
|
75
|
+
if (descriptor.action.redirect) {
|
|
76
|
+
const { destination, parameter } = descriptor.action.redirect;
|
|
77
|
+
return res.redirect(307, destination.replace(`:${parameter}`, encodeURIComponent(descriptor.params[parameter])));
|
|
90
78
|
}
|
|
91
79
|
return next();
|
|
92
80
|
}
|
|
@@ -94,4 +82,4 @@ async function enforceAdminAccess(request, res, next) {
|
|
|
94
82
|
return next(error);
|
|
95
83
|
}
|
|
96
84
|
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5mb3JjZS1hZG1pbi1hY2Nlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzL2VuZm9yY2UtYWRtaW4tYWNjZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBb0JBLGdEQWlIQztBQTlIRCxxREFBbUQ7QUFDbkQsaUVBQTZEO0FBRTdELDhEQUE0RDtBQUM1RCx3RUFBa0U7QUFDbEUsMERBQTZEO0FBQzdELDhEQUEwRDtBQUMxRCxvREFJZ0M7QUFFekIsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxPQUFzQixFQUN0QixHQUFtQixFQUNuQixJQUF3QjtJQUV4QixNQUFNLEdBQUcsR0FBRyxPQUFxQyxDQUFBO0lBQ2pELElBQUksQ0FBQztRQUNILElBQUksQ0FBQyxJQUFBLDJCQUFhLEVBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztZQUNqQyxPQUFPLEdBQUc7aUJBQ1AsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsQ0FBQyxDQUFBO1FBQzdELElBQ0UsSUFBQSxpQ0FBYyxFQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxLQUFLLFFBQVE7WUFFMUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUNmLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUE7UUFDN0IsSUFBSSxJQUFJLEVBQUUsVUFBVSxLQUFLLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQy9DLE9BQU8sR0FBRztpQkFDUCxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUNYLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDLENBQUE7UUFDcEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFD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
|
|
@@ -3,6 +3,7 @@ export { default as AccessControlService } from "./modules/access-control/servic
|
|
|
3
3
|
export * from "./lib/access/permissions";
|
|
4
4
|
export * from "./lib/access/config";
|
|
5
5
|
export * from "./lib/access/roles";
|
|
6
|
+
export * from "./resources";
|
|
6
7
|
export { requirePermission, requireAnyPermission, } from "./lib/access/middleware";
|
|
7
8
|
export { definePermission } from "./lib/access/define-permission";
|
|
8
9
|
export { explainPermission } from "./lib/access/explain";
|
|
@@ -25,6 +25,7 @@ Object.defineProperty(exports, "AccessControlService", { enumerable: true, get:
|
|
|
25
25
|
__exportStar(require("./lib/access/permissions"), exports);
|
|
26
26
|
__exportStar(require("./lib/access/config"), exports);
|
|
27
27
|
__exportStar(require("./lib/access/roles"), exports);
|
|
28
|
+
__exportStar(require("./resources"), exports);
|
|
28
29
|
var middleware_1 = require("./lib/access/middleware");
|
|
29
30
|
Object.defineProperty(exports, "requirePermission", { enumerable: true, get: function () { return middleware_1.requirePermission; } });
|
|
30
31
|
Object.defineProperty(exports, "requireAnyPermission", { enumerable: true, get: function () { return middleware_1.requireAnyPermission; } });
|
|
@@ -32,4 +33,4 @@ var define_permission_1 = require("./lib/access/define-permission");
|
|
|
32
33
|
Object.defineProperty(exports, "definePermission", { enumerable: true, get: function () { return define_permission_1.definePermission; } });
|
|
33
34
|
var explain_1 = require("./lib/access/explain");
|
|
34
35
|
Object.defineProperty(exports, "explainPermission", { enumerable: true, get: function () { return explain_1.explainPermission; } });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyREFBeUQ7QUFBaEQsZ0hBQUEsY0FBYyxPQUFBO0FBQ3ZCLDREQUFrRjtBQUF6RSxnSUFBQSxPQUFPLE9BQXdCO0FBQ3hDLDJEQUF3QztBQUN4QyxzREFBbUM7QUFDbkMscURBQWtDO0FBQ2xDLDhDQUEyQjtBQUMzQixzREFHZ0M7QUFGOUIsK0dBQUEsaUJBQWlCLE9BQUE7QUFDakIsa0hBQUEsb0JBQW9CLE9BQUE7QUFFdEIsb0VBQWlFO0FBQXhELHFIQUFBLGdCQUFnQixPQUFBO0FBQ3pCLGdEQUF3RDtBQUEvQyw0R0FBQSxpQkFBaUIsT0FBQSJ9
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { MedusaRequest } from "@medusajs/framework/http";
|
|
2
2
|
import { type AccessPrincipal } from "./permissions";
|
|
3
3
|
import { type Policy } from "./policy";
|
|
4
|
+
import { type OperationDescriptor, type ResourceDefinition } from "./resources";
|
|
4
5
|
import { type RoleDefinition, type ConfiguredRoleDefinition } from "./roles";
|
|
5
6
|
import type { ActorProvider } from "./actors";
|
|
6
7
|
export type PermissionDefinition = readonly [
|
|
@@ -26,6 +27,8 @@ export type AccessControlOptions = {
|
|
|
26
27
|
roles?: readonly RoleDefinition[];
|
|
27
28
|
/** Explicit policies for custom APIs. Native/management policies take precedence. */
|
|
28
29
|
routes?: RoutePolicy[];
|
|
30
|
+
/** Structural capability registrations for application/plugin-owned APIs. */
|
|
31
|
+
resources?: readonly ResourceDefinition[];
|
|
29
32
|
contextResolvers?: ((request: MedusaRequest) => PermissionContext | Promise<PermissionContext>)[];
|
|
30
33
|
/** Resolvers for custom APIs only. The Admin API always requires a native user. */
|
|
31
34
|
actors?: ActorProvider[];
|
|
@@ -35,8 +38,11 @@ export declare function createAccessConfig(options?: AccessControlOptions): {
|
|
|
35
38
|
roles: ConfiguredRoleDefinition[];
|
|
36
39
|
ids: string[];
|
|
37
40
|
actors: ActorProvider[];
|
|
41
|
+
resources: ResourceDefinition[];
|
|
38
42
|
contextResolvers: ((request: MedusaRequest) => PermissionContext | Promise<PermissionContext>)[];
|
|
43
|
+
/** Structural inspection only. Enforce resolveRequest(request) with operationAllowed. */
|
|
39
44
|
policyFor(method: string, path: string): Policy | null;
|
|
45
|
+
resolveRequest(request: MedusaRequest): Promise<OperationDescriptor | null>;
|
|
40
46
|
};
|
|
41
47
|
export declare function validateRules(value: unknown, ids: readonly string[]): PermissionRule[];
|
|
42
48
|
/** Priority, then exact key/namespace specificity, then condition count, then deny. */
|
|
@@ -8,10 +8,13 @@ exports.validateRules = validateRules;
|
|
|
8
8
|
exports.evaluatePermission = evaluatePermission;
|
|
9
9
|
const native_routes_json_1 = __importDefault(require("./native-routes.json"));
|
|
10
10
|
const permissions_1 = require("./permissions");
|
|
11
|
-
const
|
|
11
|
+
const native_resources_1 = require("./native-resources");
|
|
12
|
+
const route_facts_1 = require("./route-facts");
|
|
13
|
+
const resources_1 = require("./resources");
|
|
12
14
|
const permission_key_1 = require("./permission-key");
|
|
13
15
|
const roles_1 = require("./roles");
|
|
14
16
|
const explain_1 = require("./explain");
|
|
17
|
+
const immutable_config_1 = require("./immutable-config");
|
|
15
18
|
function createAccessConfig(options = {}) {
|
|
16
19
|
const permissions = [...permissions_1.PERMISSIONS];
|
|
17
20
|
const ids = new Set(permissions.map(([id]) => id));
|
|
@@ -55,7 +58,7 @@ function createAccessConfig(options = {}) {
|
|
|
55
58
|
});
|
|
56
59
|
const nativeRoots = new Set(native_routes_json_1.default.map((route) => route.path.split("/")[2]));
|
|
57
60
|
const signatures = new Set();
|
|
58
|
-
const routes = (options.routes || []).map((route) => {
|
|
61
|
+
const routes = (0, immutable_config_1.immutableConfig)((options.routes || []).map((route) => {
|
|
59
62
|
const method = route.method.toUpperCase();
|
|
60
63
|
const signature = `${method} ${route.path}`;
|
|
61
64
|
if (!/^(GET|POST|PUT|PATCH|DELETE)$/.test(method) ||
|
|
@@ -68,9 +71,70 @@ function createAccessConfig(options = {}) {
|
|
|
68
71
|
return {
|
|
69
72
|
...route,
|
|
70
73
|
method,
|
|
71
|
-
pattern: new RegExp(`^${route.path.replace(/:[a-z][a-z0-9_]*/g, "[^/]+")}$`),
|
|
72
74
|
};
|
|
73
|
-
});
|
|
75
|
+
}));
|
|
76
|
+
const resources = (0, resources_1.validateResources)(options.resources || [], [...ids], [
|
|
77
|
+
...native_resources_1.nativeResources,
|
|
78
|
+
...[...nativeRoots].map((root) => ({ key: root, root })),
|
|
79
|
+
...routes.map((route) => {
|
|
80
|
+
const parts = route.path.split("/");
|
|
81
|
+
return { key: parts[2], root: parts[2], namespace: parts[1] };
|
|
82
|
+
}),
|
|
83
|
+
]);
|
|
84
|
+
const resourceMatcher = (0, route_facts_1.createRouteMatcher)(resources.flatMap(resources_1.resourceRoutes));
|
|
85
|
+
const configuredMatcher = (0, route_facts_1.createRouteMatcher)(routes.map((route) => ({ path: route.path, methods: [route.method] })));
|
|
86
|
+
const resourceOwners = new Set(resources.map((resource) => `${resource.namespace || "admin"}/${resource.root}`));
|
|
87
|
+
const reserved = (url) => {
|
|
88
|
+
const path = (0, route_facts_1.canonicalPath)(url);
|
|
89
|
+
if (!path)
|
|
90
|
+
return true;
|
|
91
|
+
const parts = path.toLowerCase().split("/");
|
|
92
|
+
return (parts[1] === "admin" &&
|
|
93
|
+
(nativeRoots.has(parts[2]) ||
|
|
94
|
+
native_resources_1.nativeResources.some((resource) => resource.root === parts[2]) ||
|
|
95
|
+
[
|
|
96
|
+
"rbac",
|
|
97
|
+
"workflows",
|
|
98
|
+
"workflow-executions",
|
|
99
|
+
"api-keys",
|
|
100
|
+
"search",
|
|
101
|
+
"search-indexes",
|
|
102
|
+
].includes(parts[2])));
|
|
103
|
+
};
|
|
104
|
+
const custom = (method, url, body, actorId) => {
|
|
105
|
+
if (reserved(url))
|
|
106
|
+
return null;
|
|
107
|
+
const facts = resourceMatcher(method, url);
|
|
108
|
+
if (facts) {
|
|
109
|
+
const resource = resources.find((resource) => resource.root === facts.root &&
|
|
110
|
+
(resource.namespace || "admin") === facts.namespace);
|
|
111
|
+
return (0, resources_1.describeResource)(resource, facts, body, actorId);
|
|
112
|
+
}
|
|
113
|
+
const parts = (0, route_facts_1.canonicalPath)(url).toLowerCase().split("/");
|
|
114
|
+
if (resourceOwners.has(`${parts[1]}/${parts[2]}`))
|
|
115
|
+
return null;
|
|
116
|
+
const route = configuredMatcher(method, url);
|
|
117
|
+
if (!route)
|
|
118
|
+
return null;
|
|
119
|
+
const policy = routes.find((policy) => policy.path === route.template && policy.method === route.method);
|
|
120
|
+
return {
|
|
121
|
+
facts: route,
|
|
122
|
+
resource: route.root,
|
|
123
|
+
operation: "configured",
|
|
124
|
+
scope: "global",
|
|
125
|
+
params: route.params,
|
|
126
|
+
fieldResource: route.root,
|
|
127
|
+
actorTypes: ["user"],
|
|
128
|
+
access: "active-principal",
|
|
129
|
+
self: false,
|
|
130
|
+
policy: {
|
|
131
|
+
permissions: [...policy.permissions],
|
|
132
|
+
...(policy.superuser ? { superuser: true } : {}),
|
|
133
|
+
},
|
|
134
|
+
action: { operation: "configured" },
|
|
135
|
+
fieldRequirements: [],
|
|
136
|
+
};
|
|
137
|
+
};
|
|
74
138
|
const actors = options.actors || [];
|
|
75
139
|
if (new Set(actors.map((actor) => actor.type)).size !== actors.length ||
|
|
76
140
|
actors.some((actor) => !actor.type ||
|
|
@@ -83,18 +147,50 @@ function createAccessConfig(options = {}) {
|
|
|
83
147
|
roles,
|
|
84
148
|
ids: [...ids],
|
|
85
149
|
actors,
|
|
150
|
+
resources,
|
|
86
151
|
contextResolvers: options.contextResolvers || [],
|
|
152
|
+
/** Structural inspection only. Enforce resolveRequest(request) with operationAllowed. */
|
|
87
153
|
policyFor(method, path) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
154
|
+
return (((0, native_resources_1.describeNative)(method, path, {}) || custom(method, path, {}))
|
|
155
|
+
?.policy || null);
|
|
156
|
+
},
|
|
157
|
+
async resolveRequest(request) {
|
|
158
|
+
const actorId = request
|
|
159
|
+
.auth_context?.actor_id;
|
|
160
|
+
let descriptor = (0, native_resources_1.describeNative)(request.method, request.originalUrl, request.body, actorId);
|
|
161
|
+
if (!descriptor && !reserved(request.originalUrl)) {
|
|
162
|
+
const facts = resourceMatcher(request.method, request.originalUrl);
|
|
163
|
+
const resource = facts &&
|
|
164
|
+
resources.find((resource) => resource.root === facts.root &&
|
|
165
|
+
(resource.namespace || "admin") === facts.namespace);
|
|
166
|
+
if (facts && resource?.resolveScope) {
|
|
167
|
+
const action = (0, resources_1.profileAction)(resource.profile, facts);
|
|
168
|
+
const scope = await resource.resolveScope(request, (0, immutable_config_1.immutableConfig)({
|
|
169
|
+
facts,
|
|
170
|
+
resource: resource.key,
|
|
171
|
+
operation: action.operation,
|
|
172
|
+
params: facts.params,
|
|
173
|
+
}));
|
|
174
|
+
if (scope === null ||
|
|
175
|
+
!["global", "personal", "shared"].includes(scope))
|
|
176
|
+
return null;
|
|
177
|
+
descriptor = (0, resources_1.describeResource)(resource, facts, request.body, actorId, scope);
|
|
178
|
+
}
|
|
179
|
+
else
|
|
180
|
+
descriptor = custom(request.method, request.originalUrl, request.body, actorId);
|
|
181
|
+
}
|
|
182
|
+
if (!descriptor)
|
|
95
183
|
return null;
|
|
96
|
-
|
|
97
|
-
|
|
184
|
+
if (descriptor.action.payload) {
|
|
185
|
+
const permissions = await descriptor.action.payload(request, (0, immutable_config_1.immutableConfig)(descriptor));
|
|
186
|
+
if (!Array.isArray(permissions) ||
|
|
187
|
+
permissions.some((permission) => !ids.has(permission)))
|
|
188
|
+
return null;
|
|
189
|
+
descriptor.policy.permissions = [
|
|
190
|
+
...new Set([...descriptor.policy.permissions, ...permissions]),
|
|
191
|
+
];
|
|
192
|
+
}
|
|
193
|
+
return descriptor;
|
|
98
194
|
},
|
|
99
195
|
};
|
|
100
196
|
}
|
|
@@ -145,4 +241,4 @@ function validateRules(value, ids) {
|
|
|
145
241
|
function evaluatePermission(principal, permission, context = {}) {
|
|
146
242
|
return (0, explain_1.explainPermission)(principal, permission, context).allowed;
|
|
147
243
|
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hY2Nlc3MvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBK0NBLGdEQXdIQztBQUVELHNDQXlEQztBQUdELGdEQU1DO0FBM09ELDhFQUErQztBQUUvQywrQ0FJc0I7QUFDdEIscUNBQWlEO0FBQ2pELHFEQUE0RTtBQUM1RSxtQ0FJZ0I7QUFDaEIsdUNBQTZDO0FBaUM3QyxTQUFnQixrQkFBa0IsQ0FBQyxVQUFnQyxFQUFFO0lBQ25FLE1BQU0sV0FBVyxHQUEyQixDQUFDLEdBQUcseUJBQVcsQ0FBQyxDQUFBO0lBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2xELEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNuRCxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUE7UUFDckMsSUFDRSxDQUFDLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ2QsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ2QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFFWCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzNELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDWCxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxJ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
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hY2Nlc3MvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBK0RBLGdEQWlRQztBQUVELHNDQXlEQztBQUdELGdEQU1DO0FBcFlELDhFQUErQztBQUsvQywrQ0FJc0I7QUFFdEIseURBQW9FO0FBQ3BFLCtDQUFpRTtBQUNqRSwyQ0FPb0I7QUFDcEIscURBQTRFO0FBQzVFLG1DQUlnQjtBQUNoQix1Q0FBNkM7QUFDN0MseURBQW9EO0FBbUNwRCxTQUFnQixrQkFBa0IsQ0FBQyxVQUFnQyxFQUFFO0lBQ25FLE1BQU0sV0FBVyxHQUEyQixDQUFDLEdBQUcseUJBQVcsQ0FBQyxDQUFBO0lBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2xELEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNuRCxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUE7UUFDckMsSUFDRSxDQUFDLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ2QsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ2QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFFWCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzNELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDWCxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FB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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PermissionContext, PermissionRule } from "./config";
|
|
2
|
-
import type
|
|
2
|
+
import { type AccessPrincipal } from "./permissions";
|
|
3
3
|
export type PermissionDecision = {
|
|
4
4
|
allowed: boolean;
|
|
5
5
|
reason: "inactive" | "superuser" | "no_match" | "allow" | "deny";
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.explainPermission = explainPermission;
|
|
4
|
+
const permissions_1 = require("./permissions");
|
|
4
5
|
const permission_key_1 = require("./permission-key");
|
|
5
6
|
/** The shared decision engine used by enforcement and permission diagnostics. */
|
|
6
7
|
function explainPermission(principal, permission, context = {}) {
|
|
7
8
|
if (!principal.active)
|
|
8
9
|
return { allowed: false, reason: "inactive", matches: [] };
|
|
9
|
-
if (
|
|
10
|
+
if ((0, permissions_1.isSuperuser)(principal))
|
|
10
11
|
return { allowed: true, reason: "superuser", matches: [] };
|
|
11
12
|
const matches = (principal.rules || [])
|
|
12
13
|
.filter((rule) => (0, permission_key_1.permissionKeyMatches)(rule.permission, permission) &&
|
|
@@ -36,4 +37,4 @@ function explainPermission(principal, permission, context = {}) {
|
|
|
36
37
|
matches,
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWNjZXNzL2V4cGxhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSw4Q0E0Q0M7QUF0REQsK0NBQWlFO0FBQ2pFLHFEQUF1RDtBQVF2RCxpRkFBaUY7QUFDakYsU0FBZ0IsaUJBQWlCLENBQy9CLFNBQTBCLEVBQzFCLFVBQWtCLEVBQ2xCLFVBQTZCLEVBQUU7SUFFL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1FBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFBO0lBQzVELElBQUksSUFBQSx5QkFBVyxFQUFDLFNBQVMsQ0FBQztRQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQTtJQUM1RCxNQUFNLE9BQU8sR0FBa0MsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUNuRSxNQUFNLENBQ0wsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLElBQUEscUNBQW9CLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDakQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FDekMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQ2xCLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztZQUMzQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUN0QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2pDLENBQ0o7U0FDQSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQy9DLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUNyRSxNQUFNLEtBQUssR0FBRyxDQUFDLElBQW9CLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNO1FBQ3pFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO0tBQzFDLENBQUE7SUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNyQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEIsT0FBTyxDQUNMLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUMxRCxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDRixPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEtBQUssT0FBTztRQUN2QyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxVQUFVO1FBQ3hDLE9BQU87S0FDUixDQUFBO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.immutableConfig = immutableConfig;
|
|
4
|
+
/** Copy policy data before freezing it; callbacks retain their server-owned identity. */
|
|
5
|
+
function immutableConfig(value) {
|
|
6
|
+
if (Array.isArray(value))
|
|
7
|
+
return Object.freeze(value.map(immutableConfig));
|
|
8
|
+
if (value instanceof RegExp)
|
|
9
|
+
return Object.freeze(new RegExp(value.source, value.flags));
|
|
10
|
+
if (value && typeof value === "object")
|
|
11
|
+
return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, child]) => [
|
|
12
|
+
key,
|
|
13
|
+
immutableConfig(child),
|
|
14
|
+
])));
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1tdXRhYmxlLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWNjZXNzL2ltbXV0YWJsZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwwQ0FlQztBQWhCRCx5RkFBeUY7QUFDekYsU0FBZ0IsZUFBZSxDQUFJLEtBQVE7SUFDekMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN0QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBTSxDQUFBO0lBQ3ZELElBQUksS0FBSyxZQUFZLE1BQU07UUFDekIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFNLENBQUE7SUFDbEUsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUNwQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLE1BQU0sQ0FBQyxXQUFXLENBQ2hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLEdBQUc7WUFDSCxlQUFlLENBQUMsS0FBSyxDQUFDO1NBQ3ZCLENBQUMsQ0FDSCxDQUNHLENBQUE7SUFDUixPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMifQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type ResourceDefinition } from "./resources";
|
|
2
|
+
export declare const nativeResources: readonly ResourceDefinition[];
|
|
3
|
+
export declare function describeNative(method: string, url: string, body?: unknown, actorId?: string): import("./resources").OperationDescriptor | null;
|