@discovercloudai/shared 1.0.9 → 2.0.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/context/access-context.d.ts +7 -4
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/middleware/authorize.d.ts +3 -0
- package/dist/middleware/authorize.js +22 -0
- package/dist/middleware/index.d.ts +1 -0
- package/dist/middleware/index.js +1 -0
- package/dist/security/guard.d.ts +5 -0
- package/dist/security/guard.js +47 -0
- package/dist/security/index.d.ts +1 -0
- package/dist/{permissions → security}/index.js +1 -3
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +17 -0
- package/package.json +1 -1
- package/dist/permissions/global-permissions.d.ts +0 -3
- package/dist/permissions/global-permissions.js +0 -30
- package/dist/permissions/index.d.ts +0 -3
- package/dist/permissions/is-allowed.d.ts +0 -3
- package/dist/permissions/is-allowed.js +0 -16
- package/dist/permissions/org-permissions.d.ts +0 -3
- package/dist/permissions/org-permissions.js +0 -19
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AccountRole } from "../enums";
|
|
1
|
+
import { AccountRole, OrganizationRole, MembershipStatus } from "../enums";
|
|
3
2
|
export interface AccessContext {
|
|
3
|
+
accountId: string;
|
|
4
4
|
accountRole: AccountRole;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
membership?: {
|
|
6
|
+
organizationId: string;
|
|
7
|
+
role: OrganizationRole;
|
|
8
|
+
status: MembershipStatus;
|
|
9
|
+
};
|
|
7
10
|
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ __exportStar(require("./errors"), exports);
|
|
|
19
19
|
__exportStar(require("./context"), exports);
|
|
20
20
|
__exportStar(require("./dto"), exports);
|
|
21
21
|
__exportStar(require("./internal"), exports);
|
|
22
|
-
__exportStar(require("./
|
|
22
|
+
__exportStar(require("./security"), exports);
|
|
23
23
|
__exportStar(require("./utils"), exports);
|
|
24
24
|
__exportStar(require("./middleware"), exports);
|
|
25
|
+
__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Request, Response, NextFunction } from "express";
|
|
2
|
+
import { GlobalPermission, OrgPermission } from "../enums";
|
|
3
|
+
export declare const authorize: (permission: GlobalPermission | OrgPermission) => (req: Request, res: Response, next: NextFunction) => Response<any, Record<string, any>> | undefined;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authorize = void 0;
|
|
4
|
+
const security_1 = require("../security");
|
|
5
|
+
const authorize = (permission) => {
|
|
6
|
+
return (req, res, next) => {
|
|
7
|
+
if (!req.accessContext) {
|
|
8
|
+
return res.status(401).json({
|
|
9
|
+
success: false,
|
|
10
|
+
error: { message: "Unauthorized: No access context", code: "UNAUTHORIZED" }
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
if (!(0, security_1.isAllowed)(req.accessContext, permission)) {
|
|
14
|
+
return res.status(403).json({
|
|
15
|
+
success: false,
|
|
16
|
+
error: { message: `Forbidden: Missing permission ${permission}`, code: "FORBIDDEN" }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
next();
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
exports.authorize = authorize;
|
package/dist/middleware/index.js
CHANGED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AccountRole, GlobalPermission, OrganizationRole, OrgPermission } from "../enums";
|
|
2
|
+
import { AccessContext } from "../context";
|
|
3
|
+
export declare const globalRolePermissions: Record<AccountRole, readonly GlobalPermission[]>;
|
|
4
|
+
export declare const orgRolePermissions: Record<OrganizationRole, readonly OrgPermission[]>;
|
|
5
|
+
export declare const isAllowed: (ctx: AccessContext, permission: GlobalPermission | OrgPermission) => boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isAllowed = exports.orgRolePermissions = exports.globalRolePermissions = void 0;
|
|
4
|
+
const enums_1 = require("../enums");
|
|
5
|
+
exports.globalRolePermissions = {
|
|
6
|
+
[enums_1.AccountRole.SUPERADMIN]: [
|
|
7
|
+
enums_1.GlobalPermission.MANAGE_SYSTEM,
|
|
8
|
+
enums_1.GlobalPermission.MANAGE_ALL_ORGS,
|
|
9
|
+
enums_1.GlobalPermission.MANAGE_USERS,
|
|
10
|
+
enums_1.GlobalPermission.VIEW_SYSTEM_LOGS,
|
|
11
|
+
enums_1.GlobalPermission.SUPPORT_ACTIONS,
|
|
12
|
+
enums_1.GlobalPermission.MODERATE_CONTENT
|
|
13
|
+
],
|
|
14
|
+
[enums_1.AccountRole.ADMIN]: [
|
|
15
|
+
enums_1.GlobalPermission.MANAGE_USERS,
|
|
16
|
+
enums_1.GlobalPermission.SUPPORT_ACTIONS,
|
|
17
|
+
enums_1.GlobalPermission.VIEW_SYSTEM_LOGS
|
|
18
|
+
],
|
|
19
|
+
[enums_1.AccountRole.SUPPORT]: [enums_1.GlobalPermission.SUPPORT_ACTIONS],
|
|
20
|
+
[enums_1.AccountRole.MODERATOR]: [enums_1.GlobalPermission.MODERATE_CONTENT],
|
|
21
|
+
[enums_1.AccountRole.USER]: []
|
|
22
|
+
};
|
|
23
|
+
exports.orgRolePermissions = {
|
|
24
|
+
[enums_1.OrganizationRole.OWNER]: [enums_1.OrgPermission.MANAGE_ORG, enums_1.OrgPermission.MANAGE_MEMBERS],
|
|
25
|
+
[enums_1.OrganizationRole.ADMIN]: [enums_1.OrgPermission.MANAGE_MEMBERS],
|
|
26
|
+
[enums_1.OrganizationRole.EDITOR]: [],
|
|
27
|
+
[enums_1.OrganizationRole.VIEWER]: [],
|
|
28
|
+
};
|
|
29
|
+
const canPerformGlobalPermission = (role, permission) => {
|
|
30
|
+
return exports.globalRolePermissions[role]?.includes(permission) ?? false;
|
|
31
|
+
};
|
|
32
|
+
const canPerformOrgPermission = (role, status, permission) => {
|
|
33
|
+
if (status !== enums_1.MembershipStatus.ACTIVE)
|
|
34
|
+
return false;
|
|
35
|
+
return exports.orgRolePermissions[role]?.includes(permission) ?? false;
|
|
36
|
+
};
|
|
37
|
+
const isAllowed = (ctx, permission) => {
|
|
38
|
+
// Check if it's a Global Permission
|
|
39
|
+
if (Object.values(enums_1.GlobalPermission).includes(permission)) {
|
|
40
|
+
return canPerformGlobalPermission(ctx.accountRole, permission);
|
|
41
|
+
}
|
|
42
|
+
// Check if it's an Org Permission
|
|
43
|
+
if (!ctx.membership)
|
|
44
|
+
return false;
|
|
45
|
+
return canPerformOrgPermission(ctx.membership.role, ctx.membership.status, permission);
|
|
46
|
+
};
|
|
47
|
+
exports.isAllowed = isAllowed;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./guard";
|
|
@@ -14,6 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
18
|
-
__exportStar(require("./org-permissions"), exports);
|
|
19
|
-
__exportStar(require("./is-allowed"), exports);
|
|
17
|
+
__exportStar(require("./guard"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./express";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./express"), exports);
|
package/package.json
CHANGED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.canPerformGlobalPermission = exports.globalRolePermissions = void 0;
|
|
4
|
-
const enums_1 = require("../enums");
|
|
5
|
-
exports.globalRolePermissions = {
|
|
6
|
-
[enums_1.AccountRole.SUPERADMIN]: [
|
|
7
|
-
enums_1.GlobalPermission.MANAGE_SYSTEM,
|
|
8
|
-
enums_1.GlobalPermission.MANAGE_ALL_ORGS,
|
|
9
|
-
enums_1.GlobalPermission.MANAGE_USERS,
|
|
10
|
-
enums_1.GlobalPermission.VIEW_SYSTEM_LOGS,
|
|
11
|
-
enums_1.GlobalPermission.SUPPORT_ACTIONS,
|
|
12
|
-
enums_1.GlobalPermission.MODERATE_CONTENT
|
|
13
|
-
],
|
|
14
|
-
[enums_1.AccountRole.ADMIN]: [
|
|
15
|
-
enums_1.GlobalPermission.MANAGE_USERS,
|
|
16
|
-
enums_1.GlobalPermission.SUPPORT_ACTIONS,
|
|
17
|
-
enums_1.GlobalPermission.VIEW_SYSTEM_LOGS
|
|
18
|
-
],
|
|
19
|
-
[enums_1.AccountRole.SUPPORT]: [
|
|
20
|
-
enums_1.GlobalPermission.SUPPORT_ACTIONS
|
|
21
|
-
],
|
|
22
|
-
[enums_1.AccountRole.MODERATOR]: [
|
|
23
|
-
enums_1.GlobalPermission.MODERATE_CONTENT
|
|
24
|
-
],
|
|
25
|
-
[enums_1.AccountRole.USER]: []
|
|
26
|
-
};
|
|
27
|
-
const canPerformGlobalPermission = (role, permission) => {
|
|
28
|
-
return exports.globalRolePermissions[role]?.includes(permission) ?? false;
|
|
29
|
-
};
|
|
30
|
-
exports.canPerformGlobalPermission = canPerformGlobalPermission;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isAllowed = void 0;
|
|
4
|
-
const enums_1 = require("../enums");
|
|
5
|
-
const global_permissions_1 = require("./global-permissions");
|
|
6
|
-
const org_permissions_1 = require("./org-permissions");
|
|
7
|
-
const isAllowed = (ctx, permission) => {
|
|
8
|
-
if (Object.values(enums_1.GlobalPermission).includes(permission)) {
|
|
9
|
-
// We now use the role pulled from the token context, not a user database entity
|
|
10
|
-
return (0, global_permissions_1.canPerformGlobalPermission)(ctx.accountRole, permission);
|
|
11
|
-
}
|
|
12
|
-
if (!ctx.membership)
|
|
13
|
-
return false;
|
|
14
|
-
return (0, org_permissions_1.canPerformOrgPermission)(ctx.membership.role, ctx.membership.status, permission);
|
|
15
|
-
};
|
|
16
|
-
exports.isAllowed = isAllowed;
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { OrganizationRole, MembershipStatus, OrgPermission } from "../enums";
|
|
2
|
-
export declare const orgRolePermissions: Record<OrganizationRole, readonly OrgPermission[]>;
|
|
3
|
-
export declare const canPerformOrgPermission: (role: OrganizationRole, status: MembershipStatus, permission: OrgPermission) => boolean;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.canPerformOrgPermission = exports.orgRolePermissions = void 0;
|
|
4
|
-
const enums_1 = require("../enums");
|
|
5
|
-
exports.orgRolePermissions = {
|
|
6
|
-
[enums_1.OrganizationRole.OWNER]: [
|
|
7
|
-
enums_1.OrgPermission.MANAGE_ORG,
|
|
8
|
-
enums_1.OrgPermission.MANAGE_MEMBERS,
|
|
9
|
-
],
|
|
10
|
-
[enums_1.OrganizationRole.ADMIN]: [enums_1.OrgPermission.MANAGE_MEMBERS],
|
|
11
|
-
[enums_1.OrganizationRole.EDITOR]: [],
|
|
12
|
-
[enums_1.OrganizationRole.VIEWER]: [],
|
|
13
|
-
};
|
|
14
|
-
const canPerformOrgPermission = (role, status, permission) => {
|
|
15
|
-
if (status !== enums_1.MembershipStatus.ACTIVE)
|
|
16
|
-
return false;
|
|
17
|
-
return exports.orgRolePermissions[role]?.includes(permission) ?? false;
|
|
18
|
-
};
|
|
19
|
-
exports.canPerformOrgPermission = canPerformOrgPermission;
|