@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.
@@ -1,7 +1,10 @@
1
- import { OrganizationMemberDTO, OrganizationDTO } from "../dto";
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
- organization?: OrganizationDTO;
6
- membership?: OrganizationMemberDTO;
5
+ membership?: {
6
+ organizationId: string;
7
+ role: OrganizationRole;
8
+ status: MembershipStatus;
9
+ };
7
10
  }
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export * from "./errors";
3
3
  export * from "./context";
4
4
  export * from "./dto";
5
5
  export * from "./internal";
6
- export * from "./permissions";
6
+ export * from "./security";
7
7
  export * from "./utils";
8
8
  export * from "./middleware";
9
+ export * from "./types";
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("./permissions"), exports);
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;
@@ -3,3 +3,4 @@ export * from "./validate";
3
3
  export * from "./verify-internal-jwt";
4
4
  export * from "./request-id";
5
5
  export * from "./require-auth";
6
+ export * from "./authorize";
@@ -19,3 +19,4 @@ __exportStar(require("./validate"), exports);
19
19
  __exportStar(require("./verify-internal-jwt"), exports);
20
20
  __exportStar(require("./request-id"), exports);
21
21
  __exportStar(require("./require-auth"), exports);
22
+ __exportStar(require("./authorize"), exports);
@@ -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("./global-permissions"), exports);
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@discovercloudai/shared",
3
- "version": "1.0.9",
3
+ "version": "2.0.0",
4
4
  "private": false,
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
@@ -1,3 +0,0 @@
1
- import { AccountRole, GlobalPermission } from "../enums";
2
- export declare const globalRolePermissions: Record<AccountRole, readonly GlobalPermission[]>;
3
- export declare const canPerformGlobalPermission: (role: AccountRole, permission: GlobalPermission) => boolean;
@@ -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,3 +0,0 @@
1
- export * from "./global-permissions";
2
- export * from "./org-permissions";
3
- export * from "./is-allowed";
@@ -1,3 +0,0 @@
1
- import { AccessContext } from "../context";
2
- import { GlobalPermission, OrgPermission } from "../enums";
3
- export declare const isAllowed: (ctx: AccessContext, permission: GlobalPermission | OrgPermission) => boolean;
@@ -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;