@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.
- package/.eslintrc.cjs +17 -0
- package/.prettierrc.json +10 -0
- package/.release-it.json +24 -0
- package/README.md +221 -0
- package/dist/src/classes/Authzkit.d.ts +110 -0
- package/dist/src/classes/Authzkit.js +189 -0
- package/dist/src/classes/Authzkit.js.map +1 -0
- package/dist/src/dashboard/router.d.ts +19 -0
- package/dist/src/dashboard/router.js +89 -0
- package/dist/src/dashboard/router.js.map +1 -0
- package/dist/src/dashboard/routes/permissions.d.ts +3 -0
- package/dist/src/dashboard/routes/permissions.js +39 -0
- package/dist/src/dashboard/routes/permissions.js.map +1 -0
- package/dist/src/dashboard/routes/roles.d.ts +3 -0
- package/dist/src/dashboard/routes/roles.js +39 -0
- package/dist/src/dashboard/routes/roles.js.map +1 -0
- package/dist/src/dashboard/routes/users.d.ts +3 -0
- package/dist/src/dashboard/routes/users.js +81 -0
- package/dist/src/dashboard/routes/users.js.map +1 -0
- package/dist/src/drivers/mongodb/mongo-connection.d.ts +15 -0
- package/dist/src/drivers/mongodb/mongo-connection.js +89 -0
- package/dist/src/drivers/mongodb/mongo-connection.js.map +1 -0
- package/dist/src/drivers/postgres/pg-connection.d.ts +17 -0
- package/dist/src/drivers/postgres/pg-connection.js +145 -0
- package/dist/src/drivers/postgres/pg-connection.js.map +1 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.js +36 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interfaces/Authorizable.d.ts +7 -0
- package/dist/src/interfaces/Authorizable.js +3 -0
- package/dist/src/interfaces/Authorizable.js.map +1 -0
- package/dist/src/interfaces/IAuthzkitConfig.d.ts +18 -0
- package/dist/src/interfaces/IAuthzkitConfig.js +3 -0
- package/dist/src/interfaces/IAuthzkitConfig.js.map +1 -0
- package/dist/src/interfaces/Permission.d.ts +4 -0
- package/dist/src/interfaces/Permission.js +3 -0
- package/dist/src/interfaces/Permission.js.map +1 -0
- package/dist/src/interfaces/Role.d.ts +5 -0
- package/dist/src/interfaces/Role.js +3 -0
- package/dist/src/interfaces/Role.js.map +1 -0
- package/dist/src/middleware/authzMiddleware.d.ts +17 -0
- package/dist/src/middleware/authzMiddleware.js +52 -0
- package/dist/src/middleware/authzMiddleware.js.map +1 -0
- package/dist/src/stores/IAuthzkitStore.d.ts +23 -0
- package/dist/src/stores/IAuthzkitStore.js +3 -0
- package/dist/src/stores/IAuthzkitStore.js.map +1 -0
- package/dist/src/stores/InMemoryAuthzkitStore.d.ts +28 -0
- package/dist/src/stores/InMemoryAuthzkitStore.js +83 -0
- package/dist/src/stores/InMemoryAuthzkitStore.js.map +1 -0
- package/dist/src/stores/MongoAuthzkitStore.d.ts +31 -0
- package/dist/src/stores/MongoAuthzkitStore.js +127 -0
- package/dist/src/stores/MongoAuthzkitStore.js.map +1 -0
- package/dist/src/stores/PgAuthzkitStore.d.ts +31 -0
- package/dist/src/stores/PgAuthzkitStore.js +133 -0
- package/dist/src/stores/PgAuthzkitStore.js.map +1 -0
- package/dist/src/utils/envConfig.d.ts +2 -0
- package/dist/src/utils/envConfig.js +68 -0
- package/dist/src/utils/envConfig.js.map +1 -0
- package/dist/tests/Authzkit.test.d.ts +1 -0
- package/dist/tests/Authzkit.test.js +126 -0
- package/dist/tests/Authzkit.test.js.map +1 -0
- package/dist/tests/MongoAuthzkitStore.test.d.ts +1 -0
- package/dist/tests/MongoAuthzkitStore.test.js +161 -0
- package/dist/tests/MongoAuthzkitStore.test.js.map +1 -0
- package/dist/tests/MongoAuthzkitStoreCustom.test.d.ts +1 -0
- package/dist/tests/MongoAuthzkitStoreCustom.test.js +65 -0
- package/dist/tests/MongoAuthzkitStoreCustom.test.js.map +1 -0
- package/dist/tests/PgAuthzkitStore.test.d.ts +1 -0
- package/dist/tests/PgAuthzkitStore.test.js +163 -0
- package/dist/tests/PgAuthzkitStore.test.js.map +1 -0
- package/dist/tests/PgAuthzkitStoreCustom.test.d.ts +1 -0
- package/dist/tests/PgAuthzkitStoreCustom.test.js +74 -0
- package/dist/tests/PgAuthzkitStoreCustom.test.js.map +1 -0
- package/examples/express-app.ts +65 -0
- package/jest.config.js +9 -0
- package/package.json +57 -0
- package/src/classes/Authzkit.ts +214 -0
- package/src/dashboard/router.ts +79 -0
- package/src/dashboard/routes/permissions.ts +38 -0
- package/src/dashboard/routes/roles.ts +38 -0
- package/src/dashboard/routes/users.ts +81 -0
- package/src/dashboard/web/README.md +73 -0
- package/src/dashboard/web/eslint.config.js +23 -0
- package/src/dashboard/web/index.html +13 -0
- package/src/dashboard/web/package.json +31 -0
- package/src/dashboard/web/pnpm-lock.yaml +2094 -0
- package/src/dashboard/web/public/vite.svg +1 -0
- package/src/dashboard/web/src/App.css +42 -0
- package/src/dashboard/web/src/App.tsx +26 -0
- package/src/dashboard/web/src/assets/react.svg +1 -0
- package/src/dashboard/web/src/components/Navbar.tsx +53 -0
- package/src/dashboard/web/src/index.css +138 -0
- package/src/dashboard/web/src/main.tsx +10 -0
- package/src/dashboard/web/src/pages/PermissionsPage.tsx +87 -0
- package/src/dashboard/web/src/pages/RolesPage.tsx +98 -0
- package/src/dashboard/web/src/pages/UsersPage.tsx +146 -0
- package/src/dashboard/web/src/services/api.ts +59 -0
- package/src/dashboard/web/tsconfig.app.json +28 -0
- package/src/dashboard/web/tsconfig.json +7 -0
- package/src/dashboard/web/tsconfig.node.json +26 -0
- package/src/dashboard/web/vite.config.ts +8 -0
- package/src/drivers/mongodb/mongo-connection.ts +98 -0
- package/src/drivers/postgres/pg-connection.ts +159 -0
- package/src/index.ts +19 -0
- package/src/interfaces/Authorizable.ts +8 -0
- package/src/interfaces/IAuthzkitConfig.ts +19 -0
- package/src/interfaces/Permission.ts +4 -0
- package/src/interfaces/Role.ts +5 -0
- package/src/middleware/authzMiddleware.ts +60 -0
- package/src/stores/IAuthzkitStore.ts +33 -0
- package/src/stores/InMemoryAuthzkitStore.ts +101 -0
- package/src/stores/MongoAuthzkitStore.ts +171 -0
- package/src/stores/PgAuthzkitStore.ts +191 -0
- package/src/utils/envConfig.ts +70 -0
- package/tests/Authzkit.test.ts +157 -0
- package/tests/MongoAuthzkitStore.test.ts +204 -0
- package/tests/MongoAuthzkitStoreCustom.test.ts +75 -0
- package/tests/PgAuthzkitStore.test.ts +207 -0
- package/tests/PgAuthzkitStoreCustom.test.ts +90 -0
- package/tsconfig.json +37 -0
|
@@ -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 {};
|