@zakyyudha/node-authzkit 1.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.
Files changed (120) hide show
  1. package/.eslintrc.cjs +17 -0
  2. package/.prettierrc.json +10 -0
  3. package/.release-it.json +24 -0
  4. package/README.md +221 -0
  5. package/dist/src/classes/Authzkit.d.ts +110 -0
  6. package/dist/src/classes/Authzkit.js +189 -0
  7. package/dist/src/classes/Authzkit.js.map +1 -0
  8. package/dist/src/dashboard/router.d.ts +19 -0
  9. package/dist/src/dashboard/router.js +89 -0
  10. package/dist/src/dashboard/router.js.map +1 -0
  11. package/dist/src/dashboard/routes/permissions.d.ts +3 -0
  12. package/dist/src/dashboard/routes/permissions.js +39 -0
  13. package/dist/src/dashboard/routes/permissions.js.map +1 -0
  14. package/dist/src/dashboard/routes/roles.d.ts +3 -0
  15. package/dist/src/dashboard/routes/roles.js +39 -0
  16. package/dist/src/dashboard/routes/roles.js.map +1 -0
  17. package/dist/src/dashboard/routes/users.d.ts +3 -0
  18. package/dist/src/dashboard/routes/users.js +81 -0
  19. package/dist/src/dashboard/routes/users.js.map +1 -0
  20. package/dist/src/drivers/mongodb/mongo-connection.d.ts +15 -0
  21. package/dist/src/drivers/mongodb/mongo-connection.js +89 -0
  22. package/dist/src/drivers/mongodb/mongo-connection.js.map +1 -0
  23. package/dist/src/drivers/postgres/pg-connection.d.ts +17 -0
  24. package/dist/src/drivers/postgres/pg-connection.js +145 -0
  25. package/dist/src/drivers/postgres/pg-connection.js.map +1 -0
  26. package/dist/src/index.d.ts +19 -0
  27. package/dist/src/index.js +36 -0
  28. package/dist/src/index.js.map +1 -0
  29. package/dist/src/interfaces/Authorizable.d.ts +7 -0
  30. package/dist/src/interfaces/Authorizable.js +3 -0
  31. package/dist/src/interfaces/Authorizable.js.map +1 -0
  32. package/dist/src/interfaces/IAuthzkitConfig.d.ts +18 -0
  33. package/dist/src/interfaces/IAuthzkitConfig.js +3 -0
  34. package/dist/src/interfaces/IAuthzkitConfig.js.map +1 -0
  35. package/dist/src/interfaces/Permission.d.ts +4 -0
  36. package/dist/src/interfaces/Permission.js +3 -0
  37. package/dist/src/interfaces/Permission.js.map +1 -0
  38. package/dist/src/interfaces/Role.d.ts +5 -0
  39. package/dist/src/interfaces/Role.js +3 -0
  40. package/dist/src/interfaces/Role.js.map +1 -0
  41. package/dist/src/middleware/authzMiddleware.d.ts +17 -0
  42. package/dist/src/middleware/authzMiddleware.js +52 -0
  43. package/dist/src/middleware/authzMiddleware.js.map +1 -0
  44. package/dist/src/stores/IAuthzkitStore.d.ts +23 -0
  45. package/dist/src/stores/IAuthzkitStore.js +3 -0
  46. package/dist/src/stores/IAuthzkitStore.js.map +1 -0
  47. package/dist/src/stores/InMemoryAuthzkitStore.d.ts +28 -0
  48. package/dist/src/stores/InMemoryAuthzkitStore.js +83 -0
  49. package/dist/src/stores/InMemoryAuthzkitStore.js.map +1 -0
  50. package/dist/src/stores/MongoAuthzkitStore.d.ts +31 -0
  51. package/dist/src/stores/MongoAuthzkitStore.js +127 -0
  52. package/dist/src/stores/MongoAuthzkitStore.js.map +1 -0
  53. package/dist/src/stores/PgAuthzkitStore.d.ts +31 -0
  54. package/dist/src/stores/PgAuthzkitStore.js +133 -0
  55. package/dist/src/stores/PgAuthzkitStore.js.map +1 -0
  56. package/dist/src/utils/envConfig.d.ts +2 -0
  57. package/dist/src/utils/envConfig.js +68 -0
  58. package/dist/src/utils/envConfig.js.map +1 -0
  59. package/dist/tests/Authzkit.test.d.ts +1 -0
  60. package/dist/tests/Authzkit.test.js +126 -0
  61. package/dist/tests/Authzkit.test.js.map +1 -0
  62. package/dist/tests/MongoAuthzkitStore.test.d.ts +1 -0
  63. package/dist/tests/MongoAuthzkitStore.test.js +161 -0
  64. package/dist/tests/MongoAuthzkitStore.test.js.map +1 -0
  65. package/dist/tests/MongoAuthzkitStoreCustom.test.d.ts +1 -0
  66. package/dist/tests/MongoAuthzkitStoreCustom.test.js +65 -0
  67. package/dist/tests/MongoAuthzkitStoreCustom.test.js.map +1 -0
  68. package/dist/tests/PgAuthzkitStore.test.d.ts +1 -0
  69. package/dist/tests/PgAuthzkitStore.test.js +163 -0
  70. package/dist/tests/PgAuthzkitStore.test.js.map +1 -0
  71. package/dist/tests/PgAuthzkitStoreCustom.test.d.ts +1 -0
  72. package/dist/tests/PgAuthzkitStoreCustom.test.js +74 -0
  73. package/dist/tests/PgAuthzkitStoreCustom.test.js.map +1 -0
  74. package/examples/express-app.ts +65 -0
  75. package/jest.config.js +9 -0
  76. package/package.json +57 -0
  77. package/src/classes/Authzkit.ts +214 -0
  78. package/src/dashboard/router.ts +79 -0
  79. package/src/dashboard/routes/permissions.ts +38 -0
  80. package/src/dashboard/routes/roles.ts +38 -0
  81. package/src/dashboard/routes/users.ts +81 -0
  82. package/src/dashboard/web/README.md +73 -0
  83. package/src/dashboard/web/eslint.config.js +23 -0
  84. package/src/dashboard/web/index.html +13 -0
  85. package/src/dashboard/web/package.json +31 -0
  86. package/src/dashboard/web/pnpm-lock.yaml +2094 -0
  87. package/src/dashboard/web/public/vite.svg +1 -0
  88. package/src/dashboard/web/src/App.css +42 -0
  89. package/src/dashboard/web/src/App.tsx +26 -0
  90. package/src/dashboard/web/src/assets/react.svg +1 -0
  91. package/src/dashboard/web/src/components/Navbar.tsx +53 -0
  92. package/src/dashboard/web/src/index.css +138 -0
  93. package/src/dashboard/web/src/main.tsx +10 -0
  94. package/src/dashboard/web/src/pages/PermissionsPage.tsx +87 -0
  95. package/src/dashboard/web/src/pages/RolesPage.tsx +98 -0
  96. package/src/dashboard/web/src/pages/UsersPage.tsx +146 -0
  97. package/src/dashboard/web/src/services/api.ts +59 -0
  98. package/src/dashboard/web/tsconfig.app.json +28 -0
  99. package/src/dashboard/web/tsconfig.json +7 -0
  100. package/src/dashboard/web/tsconfig.node.json +26 -0
  101. package/src/dashboard/web/vite.config.ts +8 -0
  102. package/src/drivers/mongodb/mongo-connection.ts +98 -0
  103. package/src/drivers/postgres/pg-connection.ts +159 -0
  104. package/src/index.ts +19 -0
  105. package/src/interfaces/Authorizable.ts +8 -0
  106. package/src/interfaces/IAuthzkitConfig.ts +19 -0
  107. package/src/interfaces/Permission.ts +4 -0
  108. package/src/interfaces/Role.ts +5 -0
  109. package/src/middleware/authzMiddleware.ts +60 -0
  110. package/src/stores/IAuthzkitStore.ts +33 -0
  111. package/src/stores/InMemoryAuthzkitStore.ts +101 -0
  112. package/src/stores/MongoAuthzkitStore.ts +171 -0
  113. package/src/stores/PgAuthzkitStore.ts +191 -0
  114. package/src/utils/envConfig.ts +70 -0
  115. package/tests/Authzkit.test.ts +157 -0
  116. package/tests/MongoAuthzkitStore.test.ts +204 -0
  117. package/tests/MongoAuthzkitStoreCustom.test.ts +75 -0
  118. package/tests/PgAuthzkitStore.test.ts +207 -0
  119. package/tests/PgAuthzkitStoreCustom.test.ts +90 -0
  120. package/tsconfig.json +37 -0
@@ -0,0 +1,2 @@
1
+ import { IAuthzkitConfig } from '../interfaces/IAuthzkitConfig';
2
+ export declare function loadConfigFromEnv(): IAuthzkitConfig | null;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadConfigFromEnv = loadConfigFromEnv;
4
+ function loadConfigFromEnv() {
5
+ const type = process.env.AUTHZKIT_CONNECTION_TYPE;
6
+ const uri = process.env.AUTHZKIT_CONNECTION_URI;
7
+ const dbName = process.env.AUTHZKIT_DB_NAME;
8
+ if (!type && !uri) {
9
+ return null; // No config found in env
10
+ }
11
+ const models = {
12
+ users: process.env.AUTHZKIT_MODEL_USERS,
13
+ roles: process.env.AUTHZKIT_MODEL_ROLES,
14
+ permissions: process.env.AUTHZKIT_MODEL_PERMISSIONS,
15
+ user_roles: process.env.AUTHZKIT_MODEL_USER_ROLES,
16
+ user_permissions: process.env.AUTHZKIT_MODEL_USER_PERMISSIONS,
17
+ };
18
+ // Filter undefined models
19
+ const cleanModels = {};
20
+ for (const [key, value] of Object.entries(models)) {
21
+ if (value)
22
+ cleanModels[key] = value;
23
+ }
24
+ if (type === 'mongodb') {
25
+ return {
26
+ connection: {
27
+ type: 'mongodb',
28
+ uri: uri || '',
29
+ database: dbName,
30
+ },
31
+ models: Object.keys(cleanModels).length > 0 ? cleanModels : undefined,
32
+ };
33
+ }
34
+ else if (type === 'postgres') {
35
+ return {
36
+ connection: {
37
+ type: 'postgres',
38
+ uri: uri || '',
39
+ database: dbName, // Optional for PG connection string usually includes it
40
+ },
41
+ models: Object.keys(cleanModels).length > 0 ? cleanModels : undefined,
42
+ };
43
+ }
44
+ // Default fallback if type isn't explicit but URI is present, could try to guess, but stricter is better.
45
+ if (uri) {
46
+ if (uri.startsWith('mongodb')) {
47
+ return {
48
+ connection: {
49
+ type: 'mongodb',
50
+ uri: uri,
51
+ database: dbName,
52
+ },
53
+ models: Object.keys(cleanModels).length > 0 ? cleanModels : undefined,
54
+ };
55
+ }
56
+ if (uri.startsWith('postgres')) {
57
+ return {
58
+ connection: {
59
+ type: 'postgres',
60
+ uri: uri,
61
+ },
62
+ models: Object.keys(cleanModels).length > 0 ? cleanModels : undefined,
63
+ };
64
+ }
65
+ }
66
+ return null;
67
+ }
68
+ //# sourceMappingURL=envConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envConfig.js","sourceRoot":"","sources":["../../../src/utils/envConfig.ts"],"names":[],"mappings":";;AAEA,8CAmEC;AAnED,SAAgB,iBAAiB;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE5C,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,CAAC,yBAAyB;IACxC,CAAC;IAED,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACvC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;QACvC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACnD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB;QACjD,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,+BAA+B;KAC9D,CAAC;IAEF,0BAA0B;IAC1B,MAAM,WAAW,GAAQ,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK;YAAE,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtC,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;YACL,UAAU,EAAE;gBACV,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,GAAG,IAAI,EAAE;gBACd,QAAQ,EAAE,MAAM;aACjB;YACD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC;IACJ,CAAC;SAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO;YACL,UAAU,EAAE;gBACV,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE,GAAG,IAAI,EAAE;gBACd,QAAQ,EAAE,MAAM,EAAE,wDAAwD;aAC3E;YACD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC;IACJ,CAAC;IAED,0GAA0G;IAC1G,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,UAAU,EAAE;oBACV,IAAI,EAAE,SAAS;oBACf,GAAG,EAAE,GAAG;oBACR,QAAQ,EAAE,MAAM;iBACjB;gBACD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;aACtE,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,UAAU,EAAE;oBACV,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE,GAAG;iBACT;gBACD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;aACtE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Authzkit_1 = require("../src/classes/Authzkit");
4
+ const InMemoryAuthzkitStore_1 = require("../src/stores/InMemoryAuthzkitStore");
5
+ describe('Authzkit', () => {
6
+ let authzkit;
7
+ let user;
8
+ beforeEach(async () => {
9
+ // Made beforeEach async
10
+ // Each test gets a fresh Authzkit instance with a new InMemory store
11
+ const inMemoryStore = new InMemoryAuthzkitStore_1.InMemoryAuthzkitStore();
12
+ Authzkit_1.Authzkit.getInstance(inMemoryStore); // Initialize with new store
13
+ authzkit = Authzkit_1.Authzkit.getInstance(); // Get the instance, ensure it's the one we just set
14
+ await authzkit.reset(); // Ensure a clean state for each test
15
+ // Define some permissions and roles
16
+ await authzkit.definePermission('create_post');
17
+ await authzkit.definePermission('edit_post');
18
+ await authzkit.definePermission('delete_post');
19
+ await authzkit.definePermission('view_dashboard');
20
+ await authzkit.defineRole('admin', [
21
+ 'create_post',
22
+ 'edit_post',
23
+ 'delete_post',
24
+ 'view_dashboard',
25
+ ]);
26
+ await authzkit.defineRole('editor', ['create_post', 'edit_post']);
27
+ await authzkit.defineRole('viewer', ['view_dashboard']);
28
+ user = { id: 1, roles: [], permissions: [] };
29
+ });
30
+ // --- Permission Definition Tests ---
31
+ test('should define a permission', async () => {
32
+ const perm = await authzkit.definePermission('new_permission');
33
+ expect(perm).toEqual({ name: 'new_permission', guard_name: undefined });
34
+ await expect(authzkit.definePermission('new_permission')).rejects.toThrow("Permission 'new_permission' already exists.");
35
+ });
36
+ // --- Role Definition Tests ---
37
+ test('should define a role with permissions', async () => {
38
+ // Made test async
39
+ const role = await authzkit.defineRole('moderator', ['edit_post']);
40
+ expect(role).toEqual({ name: 'moderator', permissions: ['edit_post'], guard_name: undefined });
41
+ await expect(authzkit.defineRole('admin')).rejects.toThrow("Role 'admin' already exists.");
42
+ });
43
+ test('should throw error if role is defined with non-existent permission', async () => {
44
+ await expect(authzkit.defineRole('bad_role', ['non_existent_permission'])).rejects.toThrow("Permission 'non_existent_permission' not found when defining role 'bad_role'.");
45
+ });
46
+ // --- Assignment Tests ---
47
+ test('should assign a role to a user', async () => {
48
+ await authzkit.assignRole(user, 'editor');
49
+ expect(await authzkit.hasRole(user, 'editor')).toBe(true);
50
+ expect(await authzkit.hasRole(user, 'admin')).toBe(false);
51
+ });
52
+ test('should assign a direct permission to a user', async () => {
53
+ await authzkit.assignPermission(user, 'create_post');
54
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(true);
55
+ expect(await authzkit.hasPermission(user, 'edit_post')).toBe(false);
56
+ });
57
+ test('should throw error if assigning non-existent role', async () => {
58
+ await expect(authzkit.assignRole(user, 'non_existent_role')).rejects.toThrow("Role 'non_existent_role' not found.");
59
+ });
60
+ test('should throw error if assigning non-existent permission', async () => {
61
+ await expect(authzkit.assignPermission(user, 'non_existent_permission')).rejects.toThrow("Permission 'non_existent_permission' not found.");
62
+ });
63
+ // --- Revocation Tests ---
64
+ test('should revoke a role from a user', async () => {
65
+ await authzkit.assignRole(user, 'editor');
66
+ expect(await authzkit.hasRole(user, 'editor')).toBe(true);
67
+ await authzkit.revokeRole(user, 'editor');
68
+ expect(await authzkit.hasRole(user, 'editor')).toBe(false);
69
+ });
70
+ test('should revoke a direct permission from a user', async () => {
71
+ await authzkit.assignPermission(user, 'create_post');
72
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(true);
73
+ await authzkit.revokePermission(user, 'create_post');
74
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(false);
75
+ });
76
+ // --- Has Role/Permission Tests ---
77
+ test('user with role should have role', async () => {
78
+ await authzkit.assignRole(user, 'admin');
79
+ expect(await authzkit.hasRole(user, 'admin')).toBe(true);
80
+ });
81
+ test('user without role should not have role', async () => {
82
+ expect(await authzkit.hasRole(user, 'admin')).toBe(false);
83
+ });
84
+ test('user with direct permission should have permission', async () => {
85
+ await authzkit.assignPermission(user, 'edit_post');
86
+ expect(await authzkit.hasPermission(user, 'edit_post')).toBe(true);
87
+ });
88
+ test('user with role having permission should have permission', async () => {
89
+ await authzkit.assignRole(user, 'editor'); // editor has create_post, edit_post
90
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(true);
91
+ expect(await authzkit.hasPermission(user, 'edit_post')).toBe(true);
92
+ expect(await authzkit.hasPermission(user, 'delete_post')).toBe(false);
93
+ });
94
+ test('user with admin role should have all admin permissions', async () => {
95
+ await authzkit.assignRole(user, 'admin');
96
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(true);
97
+ expect(await authzkit.hasPermission(user, 'edit_post')).toBe(true);
98
+ expect(await authzkit.hasPermission(user, 'delete_post')).toBe(true);
99
+ expect(await authzkit.hasPermission(user, 'view_dashboard')).toBe(true);
100
+ });
101
+ test('user with no permissions/roles should not have any permissions', async () => {
102
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(false);
103
+ expect(await authzkit.hasRole(user, 'admin')).toBe(false);
104
+ });
105
+ test('roleHasPermission should work correctly', async () => {
106
+ expect(await authzkit.roleHasPermission('admin', 'create_post')).toBe(true);
107
+ expect(await authzkit.roleHasPermission('editor', 'delete_post')).toBe(false);
108
+ expect(await authzkit.roleHasPermission('viewer', 'view_dashboard')).toBe(true);
109
+ expect(await authzkit.roleHasPermission('non_existent_role', 'some_permission')).toBe(false);
110
+ });
111
+ // --- Reset Tests ---
112
+ test('reset should clear all permissions, roles, and assignments', async () => {
113
+ await authzkit.definePermission('test_perm');
114
+ await authzkit.defineRole('test_role', ['test_perm']);
115
+ await authzkit.assignRole(user, 'test_role');
116
+ await authzkit.assignPermission(user, 'test_perm');
117
+ await authzkit.reset();
118
+ // After reset, defining again should not throw an error (as they were cleared)
119
+ await expect(authzkit.definePermission('test_perm')).resolves.not.toThrow();
120
+ await expect(authzkit.defineRole('test_role', ['test_perm'])).resolves.not.toThrow();
121
+ // User should no longer have the role/permission
122
+ expect(await authzkit.hasRole(user, 'test_role')).toBe(false);
123
+ expect(await authzkit.hasPermission(user, 'test_perm')).toBe(false);
124
+ });
125
+ });
126
+ //# sourceMappingURL=Authzkit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Authzkit.test.js","sourceRoot":"","sources":["../../tests/Authzkit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Authzkit_1 = require("../src/classes/Authzkit");
4
+ const mongo_connection_1 = require("../src/drivers/mongodb/mongo-connection");
5
+ const MongoAuthzkitStore_1 = require("../src/stores/MongoAuthzkitStore");
6
+ const mongodb_memory_server_1 = require("mongodb-memory-server");
7
+ const mongodb_1 = require("mongodb");
8
+ // Increase Jest timeout for MongoDB operations
9
+ jest.setTimeout(30000); // 30 seconds
10
+ describe('MongoAuthzkitStore', () => {
11
+ let mongod;
12
+ let mongoClient;
13
+ let mongoConnection;
14
+ let mongoAuthzkitStore;
15
+ let authzkit;
16
+ let user;
17
+ beforeAll(async () => {
18
+ mongod = await mongodb_memory_server_1.MongoMemoryServer.create();
19
+ const uri = mongod.getUri();
20
+ const dbName = 'authzkit_test_db';
21
+ // Connect MongoClient and pass it to MongoConnection
22
+ mongoClient = new mongodb_1.MongoClient(uri);
23
+ await mongoClient.connect();
24
+ const config = {
25
+ connection: {
26
+ type: 'mongodb',
27
+ uri: uri,
28
+ database: dbName,
29
+ },
30
+ };
31
+ mongoConnection = mongo_connection_1.MongoConnection.getInstance(config, mongoClient);
32
+ await mongoConnection.connect(); // This should now just set the db instance
33
+ // Ensure the database is clean before running tests
34
+ await mongoConnection.getDb().dropDatabase();
35
+ });
36
+ beforeEach(async () => {
37
+ // Re-initialize store and authzkit for each test to ensure isolation
38
+ mongoAuthzkitStore = new MongoAuthzkitStore_1.MongoAuthzkitStore(mongoConnection);
39
+ Authzkit_1.Authzkit.getInstance(mongoAuthzkitStore);
40
+ authzkit = Authzkit_1.Authzkit.getInstance();
41
+ await authzkit.reset(); // Clear all data for current test
42
+ // Define some permissions and roles
43
+ await authzkit.definePermission('create_post');
44
+ await authzkit.definePermission('edit_post');
45
+ await authzkit.definePermission('delete_post');
46
+ await authzkit.definePermission('view_dashboard');
47
+ await authzkit.defineRole('admin', [
48
+ 'create_post',
49
+ 'edit_post',
50
+ 'delete_post',
51
+ 'view_dashboard',
52
+ ]);
53
+ await authzkit.defineRole('editor', ['create_post', 'edit_post']);
54
+ await authzkit.defineRole('viewer', ['view_dashboard']);
55
+ user = { id: 'user1', roles: [], permissions: [] }; // Changed to string for consistency with MongoDB IDs
56
+ });
57
+ afterAll(async () => {
58
+ await mongoConnection.getDb().dropDatabase(); // Clean up database after all tests
59
+ await mongoClient.close(); // Close the MongoClient connection
60
+ await mongod.stop(); // Stop the in-memory MongoDB server
61
+ });
62
+ // --- Permission Definition Tests ---
63
+ test('should define a permission', async () => {
64
+ const perm = await authzkit.definePermission('new_mongo_permission');
65
+ expect(perm).toEqual({ name: 'new_mongo_permission', guard_name: undefined });
66
+ await expect(authzkit.definePermission('new_mongo_permission')).rejects.toThrow("Permission 'new_mongo_permission' already exists.");
67
+ });
68
+ // --- Role Definition Tests ---
69
+ test('should define a role with permissions', async () => {
70
+ const role = await authzkit.defineRole('mongo_moderator', ['edit_post']);
71
+ expect(role).toEqual({
72
+ name: 'mongo_moderator',
73
+ permissions: ['edit_post'],
74
+ guard_name: undefined,
75
+ });
76
+ await expect(authzkit.defineRole('admin')).rejects.toThrow("Role 'admin' already exists.");
77
+ });
78
+ test('should throw error if role is defined with non-existent permission', async () => {
79
+ await expect(authzkit.defineRole('bad_mongo_role', ['non_existent_mongo_permission'])).rejects.toThrow("Permission 'non_existent_mongo_permission' not found when defining role 'bad_mongo_role'.");
80
+ });
81
+ // --- Assignment Tests ---
82
+ test('should assign a role to a user', async () => {
83
+ await authzkit.assignRole(user, 'editor');
84
+ expect(await authzkit.hasRole(user, 'editor')).toBe(true);
85
+ expect(await authzkit.hasRole(user, 'admin')).toBe(false);
86
+ });
87
+ test('should assign a direct permission to a user', async () => {
88
+ await authzkit.assignPermission(user, 'create_post');
89
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(true);
90
+ expect(await authzkit.hasPermission(user, 'edit_post')).toBe(false);
91
+ });
92
+ test('should throw error if assigning non-existent role', async () => {
93
+ await expect(authzkit.assignRole(user, 'non_existent_mongo_role')).rejects.toThrow("Role 'non_existent_mongo_role' not found.");
94
+ });
95
+ test('should throw error if assigning non-existent permission', async () => {
96
+ await expect(authzkit.assignPermission(user, 'non_existent_mongo_permission')).rejects.toThrow("Permission 'non_existent_mongo_permission' not found.");
97
+ });
98
+ // --- Revocation Tests ---
99
+ test('should revoke a role from a user', async () => {
100
+ await authzkit.assignRole(user, 'editor');
101
+ expect(await authzkit.hasRole(user, 'editor')).toBe(true);
102
+ await authzkit.revokeRole(user, 'editor');
103
+ expect(await authzkit.hasRole(user, 'editor')).toBe(false);
104
+ });
105
+ test('should revoke a direct permission from a user', async () => {
106
+ await authzkit.assignPermission(user, 'create_post');
107
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(true);
108
+ await authzkit.revokePermission(user, 'create_post');
109
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(false);
110
+ });
111
+ // --- Has Role/Permission Tests ---
112
+ test('user with role should have role', async () => {
113
+ await authzkit.assignRole(user, 'admin');
114
+ expect(await authzkit.hasRole(user, 'admin')).toBe(true);
115
+ });
116
+ test('user without role should not have role', async () => {
117
+ expect(await authzkit.hasRole(user, 'admin')).toBe(false);
118
+ });
119
+ test('user with direct permission should have permission', async () => {
120
+ await authzkit.assignPermission(user, 'edit_post');
121
+ expect(await authzkit.hasPermission(user, 'edit_post')).toBe(true);
122
+ });
123
+ test('user with role having permission should have permission', async () => {
124
+ await authzkit.assignRole(user, 'editor'); // editor has create_post, edit_post
125
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(true);
126
+ expect(await authzkit.hasPermission(user, 'edit_post')).toBe(true);
127
+ expect(await authzkit.hasPermission(user, 'delete_post')).toBe(false);
128
+ });
129
+ test('user with admin role should have all admin permissions', async () => {
130
+ await authzkit.assignRole(user, 'admin');
131
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(true);
132
+ expect(await authzkit.hasPermission(user, 'edit_post')).toBe(true);
133
+ expect(await authzkit.hasPermission(user, 'delete_post')).toBe(true);
134
+ expect(await authzkit.hasPermission(user, 'view_dashboard')).toBe(true);
135
+ });
136
+ test('user with no permissions/roles should not have any permissions', async () => {
137
+ expect(await authzkit.hasPermission(user, 'create_post')).toBe(false);
138
+ expect(await authzkit.hasRole(user, 'admin')).toBe(false);
139
+ });
140
+ test('roleHasPermission should work correctly', async () => {
141
+ expect(await authzkit.roleHasPermission('admin', 'create_post')).toBe(true);
142
+ expect(await authzkit.roleHasPermission('editor', 'delete_post')).toBe(false);
143
+ expect(await authzkit.roleHasPermission('viewer', 'view_dashboard')).toBe(true);
144
+ expect(await authzkit.roleHasPermission('non_existent_role', 'some_permission')).toBe(false);
145
+ });
146
+ // --- Reset Tests ---
147
+ test('reset should clear all permissions, roles, and assignments', async () => {
148
+ await authzkit.definePermission('test_mongo_perm');
149
+ await authzkit.defineRole('test_mongo_role', ['test_mongo_perm']);
150
+ await authzkit.assignRole(user, 'test_mongo_role');
151
+ await authzkit.assignPermission(user, 'test_mongo_perm');
152
+ await authzkit.reset();
153
+ // After reset, defining again should not throw an error (as they were cleared)
154
+ await expect(authzkit.definePermission('test_mongo_perm')).resolves.not.toThrow();
155
+ await expect(authzkit.defineRole('test_mongo_role', ['test_mongo_perm'])).resolves.not.toThrow();
156
+ // User should no longer have the role/permission
157
+ expect(await authzkit.hasRole(user, 'test_mongo_role')).toBe(false);
158
+ expect(await authzkit.hasPermission(user, 'test_mongo_perm')).toBe(false);
159
+ });
160
+ });
161
+ //# sourceMappingURL=MongoAuthzkitStore.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoAuthzkitStore.test.js","sourceRoot":"","sources":["../../tests/MongoAuthzkitStore.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Authzkit_1 = require("../src/classes/Authzkit");
4
+ const mongo_connection_1 = require("../src/drivers/mongodb/mongo-connection");
5
+ const MongoAuthzkitStore_1 = require("../src/stores/MongoAuthzkitStore");
6
+ const mongodb_memory_server_1 = require("mongodb-memory-server");
7
+ const mongodb_1 = require("mongodb");
8
+ // Increase Jest timeout for MongoDB operations
9
+ jest.setTimeout(30000); // 30 seconds
10
+ describe('MongoAuthzkitStore (Custom Collections)', () => {
11
+ let mongod;
12
+ let mongoClient;
13
+ let mongoConnection;
14
+ let mongoAuthzkitStore;
15
+ let authzkit;
16
+ beforeAll(async () => {
17
+ mongod = await mongodb_memory_server_1.MongoMemoryServer.create();
18
+ const uri = mongod.getUri();
19
+ const dbName = 'authzkit_test_custom_db';
20
+ // Connect MongoClient and pass it to MongoConnection
21
+ mongoClient = new mongodb_1.MongoClient(uri);
22
+ await mongoClient.connect();
23
+ const config = {
24
+ connection: {
25
+ type: 'mongodb',
26
+ uri: uri,
27
+ database: dbName,
28
+ },
29
+ models: {
30
+ users: 'custom_users',
31
+ roles: 'custom_roles',
32
+ permissions: 'custom_permissions',
33
+ user_roles: 'custom_user_roles',
34
+ user_permissions: 'custom_user_permissions',
35
+ },
36
+ };
37
+ mongoConnection = mongo_connection_1.MongoConnection.getInstance(config, mongoClient);
38
+ await mongoConnection.connect(); // This should now just set the db instance
39
+ // Ensure the database is clean before running tests
40
+ await mongoConnection.getDb().dropDatabase();
41
+ });
42
+ beforeEach(async () => {
43
+ // Re-initialize store and authzkit for each test to ensure isolation
44
+ mongoAuthzkitStore = new MongoAuthzkitStore_1.MongoAuthzkitStore(mongoConnection);
45
+ Authzkit_1.Authzkit.getInstance(mongoAuthzkitStore);
46
+ authzkit = Authzkit_1.Authzkit.getInstance();
47
+ await authzkit.reset(); // Clear all data for current test
48
+ await authzkit.definePermission('custom_perm');
49
+ });
50
+ afterAll(async () => {
51
+ await mongoConnection.getDb().dropDatabase(); // Clean up database after all tests
52
+ await mongoClient.close(); // Close the MongoClient connection
53
+ await mongod.stop(); // Stop the in-memory MongoDB server
54
+ });
55
+ test('should store data in custom collections', async () => {
56
+ const db = mongoConnection.getDb();
57
+ // Verify data is in 'custom_permissions' collection
58
+ const count = await db.collection('custom_permissions').countDocuments({ name: 'custom_perm' });
59
+ expect(count).toBe(1);
60
+ // Verify default collection is empty
61
+ const defaultCount = await db.collection('permissions').countDocuments({ name: 'custom_perm' });
62
+ expect(defaultCount).toBe(0);
63
+ });
64
+ });
65
+ //# sourceMappingURL=MongoAuthzkitStoreCustom.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoAuthzkitStoreCustom.test.js","sourceRoot":"","sources":["../../tests/MongoAuthzkitStoreCustom.test.ts"],"names":[],"mappings":";;AAAA,sDAAmD;AACnD,8EAA0E;AAC1E,yEAAsE;AACtE,iEAA0D;AAC1D,qCAAsC;AAGtC,+CAA+C;AAC/C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa;AAErC,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,IAAI,MAAyB,CAAC;IAC9B,IAAI,WAAwB,CAAC;IAC7B,IAAI,eAAgC,CAAC;IACrC,IAAI,kBAAsC,CAAC;IAC3C,IAAI,QAAkB,CAAC;IAEvB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,GAAG,MAAM,yCAAiB,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,yBAAyB,CAAC;QAEzC,qDAAqD;QACrD,WAAW,GAAG,IAAI,qBAAW,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAoB;YAC9B,UAAU,EAAE;gBACV,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,GAAG;gBACR,QAAQ,EAAE,MAAM;aACjB;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE,cAAc;gBACrB,WAAW,EAAE,oBAAoB;gBACjC,UAAU,EAAE,mBAAmB;gBAC/B,gBAAgB,EAAE,yBAAyB;aAC5C;SACF,CAAC;QAEF,eAAe,GAAG,kCAAe,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACnE,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,2CAA2C;QAE5E,oDAAoD;QACpD,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,qEAAqE;QACrE,kBAAkB,GAAG,IAAI,uCAAkB,CAAC,eAAe,CAAC,CAAC;QAC7D,mBAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACzC,QAAQ,GAAG,mBAAQ,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,kCAAkC;QAE1D,MAAM,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,oCAAoC;QAClF,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,mCAAmC;QAC9D,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,oCAAoC;IAC3D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC;QACnC,oDAAoD;QACpD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtB,qCAAqC;QACrC,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};