@holoyan/adonisjs-permissions 0.1.0 → 0.5.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.
Files changed (46) hide show
  1. package/README.md +160 -59
  2. package/build/index.d.ts +10 -4
  3. package/build/index.js +10 -5
  4. package/build/providers/role_permission_provider.d.ts +3 -0
  5. package/build/providers/role_permission_provider.js +21 -0
  6. package/build/src/acl.d.ts +10 -5
  7. package/build/src/acl.js +17 -9
  8. package/build/src/decorators.js +1 -0
  9. package/build/src/mixins/has_permissions.d.ts +58 -26
  10. package/build/src/mixins/has_permissions.js +123 -18
  11. package/build/src/model_manager.d.ts +7 -0
  12. package/build/src/model_manager.js +15 -0
  13. package/build/src/models/permission.d.ts +4 -4
  14. package/build/src/models/permission.js +2 -7
  15. package/build/src/models/role.d.ts +1 -1
  16. package/build/src/models/role.js +2 -7
  17. package/build/src/morph_map.d.ts +5 -2
  18. package/build/src/morph_map.js +16 -9
  19. package/build/src/services/helper.d.ts +2 -3
  20. package/build/src/services/helper.js +1 -7
  21. package/build/src/services/model_has_role_permissions.d.ts +41 -39
  22. package/build/src/services/model_has_role_permissions.js +92 -111
  23. package/build/src/services/model_service.d.ts +15 -6
  24. package/build/src/services/model_service.js +39 -14
  25. package/build/src/services/permissions/empty_permission.d.ts +8 -0
  26. package/build/src/services/permissions/empty_permission.js +17 -0
  27. package/build/src/services/permissions/permission_has_model_roles.d.ts +12 -8
  28. package/build/src/services/permissions/permission_has_model_roles.js +28 -19
  29. package/build/src/services/permissions/permissions_service.d.ts +42 -30
  30. package/build/src/services/permissions/permissions_service.js +198 -155
  31. package/build/src/services/query_helper.d.ts +7 -0
  32. package/build/src/services/query_helper.js +12 -0
  33. package/build/src/services/roles/empty_roles.d.ts +8 -0
  34. package/build/src/services/roles/empty_roles.js +17 -0
  35. package/build/src/services/roles/role_has_model_permissions.d.ts +32 -33
  36. package/build/src/services/roles/role_has_model_permissions.js +64 -78
  37. package/build/src/services/roles/roles_service.d.ts +20 -9
  38. package/build/src/services/roles/roles_service.js +90 -34
  39. package/build/src/types.d.ts +65 -5
  40. package/build/stubs/configs/permissions.stub +1 -1
  41. package/build/stubs/migrations/create_db.stub +8 -8
  42. package/package.json +3 -1
  43. package/build/src/mixins/has_role_permissions.d.ts +0 -128
  44. package/build/src/mixins/has_role_permissions.js +0 -10
  45. package/build/src/mixins/has_roles.d.ts +0 -1
  46. package/build/src/mixins/has_roles.js +0 -47
@@ -1,172 +1,153 @@
1
- import { destructTarget, formatList, morphMap } from './helper.js';
1
+ import { destructTarget, formatList } from './helper.js';
2
2
  export class ModelHasRolePermissions {
3
3
  model;
4
4
  roleService;
5
5
  permissionsService;
6
- constructor(model, roleService, permissionsService) {
6
+ map;
7
+ constructor(model, roleService, permissionsService, map) {
7
8
  this.model = model;
8
9
  this.roleService = roleService;
9
10
  this.permissionsService = permissionsService;
11
+ this.map = map;
10
12
  }
11
13
  // roles related section BEGIN
12
14
  async roles() {
13
- const map = await morphMap();
14
- return this.roleService.all(map.getAlias(this.model), this.model.getModelId());
15
+ return this.roleService.all(this.map.getAlias(this.model), this.model.getModelId());
15
16
  }
16
- async hasRole(role) {
17
- const map = await morphMap();
18
- return this.roleService.has(map.getAlias(this.model), this.model.getModelId(), role);
17
+ hasRole(role) {
18
+ return this.roleService.has(this.map.getAlias(this.model), this.model.getModelId(), role);
19
19
  }
20
- async hasAllRoles(roles) {
21
- const map = await morphMap();
22
- return this.roleService.hasAll(map.getAlias(this.model), this.model.getModelId(), roles);
20
+ hasAllRoles(...roles) {
21
+ return this.roleService.hasAll(this.map.getAlias(this.model), this.model.getModelId(), roles);
23
22
  }
24
- async hasAnyRole(roles) {
25
- const map = await morphMap();
26
- return this.roleService.hasAll(map.getAlias(this.model), this.model.getModelId(), roles);
23
+ hasAnyRole(...roles) {
24
+ return this.roleService.hasAny(this.map.getAlias(this.model), this.model.getModelId(), roles);
27
25
  }
28
- async assignRole(role) {
29
- const map = await morphMap();
30
- return this.roleService.assign(role, map.getAlias(this.model), this.model.getModelId());
26
+ assignRole(role) {
27
+ return this.roleService.assign(role, this.map.getAlias(this.model), this.model.getModelId());
28
+ }
29
+ assignAllRoles(...roles) {
30
+ return this.roleService.assignAll(roles, this.map.getAlias(this.model), this.model.getModelId());
31
31
  }
32
32
  revokeRole(role) {
33
- return this.revokeAllRoles([role]);
33
+ return this.revokeAllRoles(role);
34
34
  }
35
- revokeAllRoles(roles) {
35
+ revokeAllRoles(...roles) {
36
36
  const { slugs, ids } = formatList(roles);
37
37
  return this.roleService.revokeAll([...slugs, ...ids], this.model);
38
38
  }
39
+ flushRoles() {
40
+ return this.roleService.flush(this.map.getAlias(this.model), this.model.getModelId());
41
+ }
39
42
  // roles related section END
40
43
  // permissions related section BEGIN
41
- async permissions(includeForbiddens = false) {
42
- const map = await morphMap();
43
- return this.permissionsService.all(map.getAlias(this.model), this.model.getModelId(), includeForbiddens);
44
+ async permissions(includeForbiddings = false) {
45
+ return this.permissionsService.all(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
44
46
  }
45
- async globalPermissions(includeForbiddens = false) {
46
- const map = await morphMap();
47
- return this.permissionsService.global(map.getAlias(this.model), this.model.getModelId(), includeForbiddens);
47
+ async globalPermissions(includeForbiddings = false) {
48
+ return this.permissionsService.global(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
48
49
  }
49
- async onResourcePermissions(includeForbiddens = false) {
50
- const map = await morphMap();
51
- return this.permissionsService.onResource(map.getAlias(this.model), this.model.getModelId(), includeForbiddens);
50
+ async onResourcePermissions(includeForbiddings = false) {
51
+ return this.permissionsService.onResource(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
52
52
  }
53
- async directGlobalPermissions(includeForbiddens = false) {
54
- const map = await morphMap();
55
- return this.permissionsService.directGlobal(map.getAlias(this.model), this.model.getModelId(), includeForbiddens);
53
+ async directGlobalPermissions(includeForbiddings = false) {
54
+ return this.permissionsService.directGlobal(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
56
55
  }
57
- async directResourcePermissions(includeForbiddens = false) {
58
- const map = await morphMap();
59
- return this.permissionsService.directResource(map.getAlias(this.model), this.model.getModelId(), includeForbiddens);
56
+ async directResourcePermissions(includeForbiddings = false) {
57
+ return this.permissionsService.directResource(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
60
58
  }
61
- async containsPermission(permisison) {
62
- const map = await morphMap();
63
- const result = await this.permissionsService.containsAny(map.getAlias(this.model), this.model.getModelId(), [permisison]);
59
+ async containsPermission(permission) {
60
+ const result = await this.permissionsService.containsAny(this.map.getAlias(this.model), this.model.getModelId(), [permission]);
64
61
  return result;
65
62
  }
66
- async containsAllPermissions(permisisons) {
67
- const map = await morphMap();
68
- const result = await this.permissionsService.containsAll(map.getAlias(this.model), this.model.getModelId(), permisisons);
63
+ async containsAllPermissions(permissions) {
64
+ const result = await this.permissionsService.containsAll(this.map.getAlias(this.model), this.model.getModelId(), permissions);
69
65
  return result;
70
66
  }
71
- async containsAnyPermission(permisisons) {
72
- const map = await morphMap();
73
- const result = await this.permissionsService.containsAny(map.getAlias(this.model), this.model.getModelId(), permisisons);
67
+ async containsAnyPermission(permissions) {
68
+ const result = await this.permissionsService.containsAny(this.map.getAlias(this.model), this.model.getModelId(), permissions);
74
69
  return result;
75
70
  }
76
- async containsDirectPermission(permisison) {
77
- const map = await morphMap();
78
- const result = await this.permissionsService.containsAnyDirect(map.getAlias(this.model), this.model.getModelId(), [permisison]);
71
+ async containsDirectPermission(permission) {
72
+ const result = await this.permissionsService.containsAnyDirect(this.map.getAlias(this.model), this.model.getModelId(), [permission]);
79
73
  return result;
80
74
  }
81
- async containsAllPermissionsDirectly(permisisons) {
82
- const map = await morphMap();
83
- const result = await this.permissionsService.containsAllDirect(map.getAlias(this.model), this.model.getModelId(), permisisons);
84
- return result;
75
+ containsAllPermissionsDirectly(permissions) {
76
+ return this.permissionsService.containsAllDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions);
85
77
  }
86
- async containsAnyPermissionDirectly(permisisons) {
87
- const map = await morphMap();
88
- const result = await this.permissionsService.containsAnyDirect(map.getAlias(this.model), this.model.getModelId(), permisisons);
78
+ async containsAnyPermissionDirectly(permissions) {
79
+ const result = await this.permissionsService.containsAnyDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions);
89
80
  return result;
90
81
  }
91
- async hasPermission(permisison, target) {
92
- return this.hasAnyPermission([permisison], target);
82
+ async hasPermission(permission, target) {
83
+ return this.hasAnyPermission([permission], target);
93
84
  }
94
- async hasAllPermissions(permisisons, target) {
95
- const map = await morphMap();
96
- const entity = await destructTarget(target);
97
- const result = await this.permissionsService.hasAll(map.getAlias(this.model), this.model.getModelId(), permisisons, entity.targetClass, entity.targetId);
98
- return result;
85
+ async hasAllPermissions(permissions, target) {
86
+ const entity = await destructTarget(this.map, target);
87
+ return await this.permissionsService.hasAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
99
88
  }
100
- async hasAnyPermission(permisisons, target) {
101
- const map = await morphMap();
102
- const entity = await destructTarget(target);
103
- const result = await this.permissionsService.hasAny(map.getAlias(this.model), this.model.getModelId(), permisisons, entity.targetClass, entity.targetId);
104
- return result;
89
+ async hasAnyPermission(permissions, target) {
90
+ const entity = await destructTarget(this.map, target);
91
+ return await this.permissionsService.hasAny(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
105
92
  }
106
- async hasAnyDirectPermission(permisisons, target) {
107
- const map = await morphMap();
108
- const entity = await destructTarget(target);
109
- const result = await this.permissionsService.hasAnyDirect(map.getAlias(this.model), this.model.getModelId(), permisisons, entity.targetClass, entity.targetId);
110
- return result;
93
+ async hasAnyDirectPermission(permissions, target) {
94
+ const entity = await destructTarget(this.map, target);
95
+ return await this.permissionsService.hasAnyDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
111
96
  }
112
- async hasDirectPermission(permisison, target) {
113
- return this.hasAnyDirectPermission([permisison], target);
97
+ async hasDirectPermission(permission, target) {
98
+ return this.hasAnyDirectPermission([permission], target);
114
99
  }
115
- async hasAllPermissionsDirect(permisisons, target) {
116
- const map = await morphMap();
117
- const entity = await destructTarget(target);
118
- const result = await this.permissionsService.hasAllDirect(map.getAlias(this.model), this.model.getModelId(), permisisons, entity.targetClass, entity.targetId);
119
- return result;
100
+ async hasAllPermissionsDirect(permissions, target) {
101
+ const entity = await destructTarget(this.map, target);
102
+ return await this.permissionsService.hasAllDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
103
+ }
104
+ can(permission, target) {
105
+ return this.hasPermission(permission, target);
120
106
  }
121
- can(permisison, target) {
122
- return this.hasPermission(permisison, target);
107
+ canAll(permissions, target) {
108
+ return this.hasAllPermissions(permissions, target);
123
109
  }
124
- canAll(permisisons, target) {
125
- return this.hasAllPermissions(permisisons, target);
110
+ canAny(permissions, target) {
111
+ return this.hasAnyPermission(permissions, target);
126
112
  }
127
- canAny(permisisons, target) {
128
- return this.hasAnyPermission(permisisons, target);
113
+ async assignDirectPermission(permission, target) {
114
+ const entity = await destructTarget(this.map, target);
115
+ return this.permissionsService.giveAll(this.map.getAlias(this.model), this.model.getModelId(), [permission], entity.targetClass, entity.targetId, true);
129
116
  }
130
- async assignDirectPermission(permisison, target) {
131
- const map = await morphMap();
132
- const entity = await destructTarget(target);
133
- return this.permissionsService.giveAll(map.getAlias(this.model), this.model.getModelId(), [permisison], entity.targetClass, entity.targetId, true);
117
+ async assignDirectAllPermissions(permissions, target) {
118
+ const entity = await destructTarget(this.map, target);
119
+ return this.permissionsService.giveAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId, true);
134
120
  }
135
- allow(permisison, target) {
136
- return this.assignDirectPermission(permisison, target);
121
+ allow(permission, target) {
122
+ return this.assignDirectPermission(permission, target);
137
123
  }
138
- async revokePermission(permisison, target) {
139
- return this.revokeAllPermissions([permisison], target);
124
+ async revokePermission(permission, target) {
125
+ return this.revokeAllPermissions([permission], target);
140
126
  }
141
- async revokeAllPermissions(permisisons, target) {
142
- const map = await morphMap();
143
- const entity = await destructTarget(target);
144
- return this.permissionsService.revokeAll(map.getAlias(this.model), this.model.getModelId(), permisisons, entity.targetClass, entity.targetId);
127
+ async revokeAllPermissions(permissions, target) {
128
+ const entity = await destructTarget(this.map, target);
129
+ return this.permissionsService.revokeAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
145
130
  }
146
131
  async flushPermissions() {
147
- const map = await morphMap();
148
- return this.permissionsService.flush(map.getAlias(this.model), this.model.getModelId());
132
+ return this.permissionsService.flush(this.map.getAlias(this.model), this.model.getModelId());
149
133
  }
150
134
  async flush() {
151
- const map = await morphMap();
152
- await this.permissionsService.flush(map.getAlias(this.model), this.model.getModelId());
153
- await this.roleService.flush(map.getAlias(this.model), this.model.getModelId());
135
+ await this.permissionsService.flush(this.map.getAlias(this.model), this.model.getModelId());
136
+ await this.roleService.flush(this.map.getAlias(this.model), this.model.getModelId());
154
137
  return true;
155
138
  }
156
- async forbid(permisison, target) {
157
- return this.forbidAll([permisison], target);
139
+ async forbid(permission, target) {
140
+ return this.forbidAll([permission], target);
158
141
  }
159
- async forbidAll(permisisons, target) {
160
- const map = await morphMap();
161
- const entity = await destructTarget(target);
162
- return this.permissionsService.forbidAll(map.getAlias(this.model), this.model.getModelId(), permisisons, entity.targetClass, entity.targetId);
142
+ async forbidAll(permissions, target) {
143
+ const entity = await destructTarget(this.map, target);
144
+ return this.permissionsService.forbidAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
163
145
  }
164
- async unforbidAll(permisisons, target) {
165
- const map = await morphMap();
166
- const entity = await destructTarget(target);
167
- return this.permissionsService.unforbidAll(map.getAlias(this.model), this.model.getModelId(), permisisons, entity.targetClass, entity.targetId);
146
+ async unforbidAll(permissions, target) {
147
+ const entity = await destructTarget(this.map, target);
148
+ return this.permissionsService.unforbidAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
168
149
  }
169
- async unforbid(permisison, target) {
170
- return this.unforbidAll([permisison], target);
150
+ async unforbid(permission, target) {
151
+ return this.unforbidAll([permission], target);
171
152
  }
172
153
  }
@@ -1,8 +1,17 @@
1
- import ModelPermission from '../models/model_permission.js';
2
- import ModelRole from '../models/model_role.js';
3
- export default class ModelService {
4
- all(roleId: number): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<typeof ModelRole, ModelRole>;
1
+ import BaseService from './base_service.js';
2
+ import { BaseModel } from '@adonisjs/lucid/orm';
3
+ import { MorphInterface } from '../types.js';
4
+ export default class ModelService extends BaseService {
5
+ private modelPermissionClassName;
6
+ private modelRoleClassName;
7
+ private map;
8
+ private modelPermissionQuery;
9
+ private readonly modelPermissionTable;
10
+ private modelRoleQuery;
11
+ private readonly modelRoleTable;
12
+ constructor(modelPermissionClassName: typeof BaseModel, modelRoleClassName: typeof BaseModel, map: MorphInterface);
13
+ all(roleId: number): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../types.js").ModelRoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
5
14
  allFor(modelType: string, roleId: number): Promise<any>;
6
- allByPermission(permissionId: number): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<typeof ModelPermission, ModelPermission>;
7
- allByPermissionFor(modelType: string, permisisonId: number): Promise<any>;
15
+ allByPermission(permissionId: number): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../types.js").ModelPermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
16
+ allByPermissionFor(modelType: string, permissionId: number): Promise<any>;
8
17
  }
@@ -1,31 +1,56 @@
1
- import ModelPermission from '../models/model_permission.js';
2
- import ModelRole from '../models/model_role.js';
3
- import { morphMap } from './helper.js';
4
- export default class ModelService {
1
+ import BaseService from './base_service.js';
2
+ import { getModelPermissionModelQuery, getModelRoleModelQuery } from './query_helper.js';
3
+ export default class ModelService extends BaseService {
4
+ modelPermissionClassName;
5
+ modelRoleClassName;
6
+ map;
7
+ // private permissionQuery
8
+ // private readonly permissionTable
9
+ // private roleQuery
10
+ // private readonly roleTable
11
+ modelPermissionQuery;
12
+ modelPermissionTable;
13
+ modelRoleQuery;
14
+ modelRoleTable;
15
+ constructor(
16
+ // private roleClassName: typeof BaseModel,
17
+ // private permissionClassName: typeof BaseModel,
18
+ modelPermissionClassName, modelRoleClassName, map) {
19
+ super();
20
+ this.modelPermissionClassName = modelPermissionClassName;
21
+ this.modelRoleClassName = modelRoleClassName;
22
+ this.map = map;
23
+ // this.permissionQuery = getPermissionModelQuery(this.permissionClassName)
24
+ // this.permissionTable = this.permissionClassName.table
25
+ // this.roleQuery = getRoleModelQuery(this.roleClassName)
26
+ // this.roleTable = this.roleClassName.table
27
+ this.modelPermissionQuery = getModelPermissionModelQuery(this.modelPermissionClassName);
28
+ this.modelPermissionTable = this.modelPermissionClassName.table;
29
+ this.modelRoleQuery = getModelRoleModelQuery(this.modelRoleClassName);
30
+ this.modelRoleTable = this.modelRoleClassName.table;
31
+ }
5
32
  all(roleId) {
6
- return ModelRole.query().where('role_id', roleId);
33
+ return this.modelRoleQuery.where('role_id', roleId);
7
34
  }
8
35
  async allFor(modelType, roleId) {
9
- const map = await morphMap();
10
- const modelClass = map.get(modelType);
36
+ const modelClass = this.map.get(modelType);
11
37
  return modelClass
12
38
  .query()
13
- .join(ModelRole.table + ' as mr', 'mr.model_id', '=', modelClass.table + '.id')
39
+ .join(this.modelRoleTable + ' as mr', 'mr.model_id', '=', modelClass.table + '.id')
14
40
  .where('mr.role_id', roleId)
15
41
  .where('mr.model_type', modelType);
16
42
  }
17
43
  allByPermission(permissionId) {
18
- return ModelPermission.query()
44
+ return this.modelPermissionQuery
19
45
  .where('permission_id', permissionId)
20
46
  .groupBy(['model_type', 'model_id']);
21
47
  }
22
- async allByPermissionFor(modelType, permisisonId) {
23
- const map = await morphMap();
24
- const modelClass = map.get(modelType);
48
+ async allByPermissionFor(modelType, permissionId) {
49
+ const modelClass = this.map.get(modelType);
25
50
  return modelClass
26
51
  .query()
27
- .join(ModelPermission.table + ' as mp', 'mp.model_id', '=', modelClass.table + '.id')
28
- .where('mp.permission_id', permisisonId)
52
+ .join(this.modelPermissionTable + ' as mp', 'mp.model_id', '=', modelClass.table + '.id')
53
+ .where('mp.permission_id', permissionId)
29
54
  .where('mp.model_type', modelType);
30
55
  }
31
56
  }
@@ -0,0 +1,8 @@
1
+ import { BaseModel } from '@adonisjs/lucid/orm';
2
+ export default class EmptyPermission {
3
+ private permissionClassName;
4
+ private permissionQuery;
5
+ constructor(permissionClassName: typeof BaseModel);
6
+ delete(permission: string): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, any>;
7
+ query(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
8
+ }
@@ -0,0 +1,17 @@
1
+ import { getPermissionModelQuery } from '../query_helper.js';
2
+ export default class EmptyPermission {
3
+ permissionClassName;
4
+ permissionQuery;
5
+ constructor(permissionClassName) {
6
+ this.permissionClassName = permissionClassName;
7
+ this.permissionQuery = getPermissionModelQuery(this.permissionClassName);
8
+ }
9
+ delete(permission) {
10
+ // get all permissions by slug
11
+ // if there is permission with allowed false then check if it has `links`
12
+ return this.permissionQuery.where('slug', permission).delete();
13
+ }
14
+ query() {
15
+ return this.permissionQuery;
16
+ }
17
+ }
@@ -1,20 +1,24 @@
1
- import ModelPermission from '../../models/model_permission.js';
2
- import Permission from '../../models/permission.js';
3
- import Role from '../../models/role.js';
4
- import { AclModel } from '../../types.js';
1
+ import { AclModel, MorphInterface, PermissionInterface } from '../../types.js';
5
2
  import ModelService from '../model_service.js';
6
3
  import RolesService from '../roles/roles_service.js';
7
4
  import PermissionsService from './permissions_service.js';
5
+ import { BaseModel } from '@adonisjs/lucid/orm';
8
6
  export default class PermissionHasModelRoles {
9
7
  private permission;
10
8
  private roleService;
11
9
  private permissionService;
12
10
  private modelService;
13
- constructor(permission: Permission, roleService: RolesService, permissionService: PermissionsService, modelService: ModelService);
14
- models(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<typeof ModelPermission, ModelPermission>;
11
+ private modelPermissionClassName;
12
+ private roleClassName;
13
+ private map;
14
+ private modelPermissionQuery;
15
+ private roleQuery;
16
+ private readonly roleTable;
17
+ constructor(permission: PermissionInterface, roleService: RolesService, permissionService: PermissionsService, modelService: ModelService, modelPermissionClassName: typeof BaseModel, roleClassName: typeof BaseModel, map: MorphInterface);
18
+ models(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").ModelPermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
15
19
  modelsFor(modelType: string): Promise<any>;
16
- roles(): Promise<Role[]>;
20
+ roles(): Promise<import("../../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
17
21
  belongsToRole(role: string | number): Promise<boolean>;
18
- attachToRole(role: string | number, target?: AclModel | Function): Promise<ModelPermission[]>;
22
+ attachToRole(role: string | number, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
19
23
  detachFromRole(role: string | number): Promise<any[]>;
20
24
  }
@@ -1,16 +1,29 @@
1
- import ModelPermission from '../../models/model_permission.js';
2
- import Role from '../../models/role.js';
3
- import { destructTarget, morphMap } from '../helper.js';
1
+ import { destructTarget } from '../helper.js';
2
+ import { getModelPermissionModelQuery, getRoleModelQuery } from '../query_helper.js';
4
3
  export default class PermissionHasModelRoles {
5
4
  permission;
6
5
  roleService;
7
6
  permissionService;
8
7
  modelService;
9
- constructor(permission, roleService, permissionService, modelService) {
8
+ modelPermissionClassName;
9
+ roleClassName;
10
+ map;
11
+ modelPermissionQuery;
12
+ // private readonly modelPermissionTable
13
+ roleQuery;
14
+ roleTable;
15
+ constructor(permission, roleService, permissionService, modelService, modelPermissionClassName, roleClassName, map) {
10
16
  this.permission = permission;
11
17
  this.roleService = roleService;
12
18
  this.permissionService = permissionService;
13
19
  this.modelService = modelService;
20
+ this.modelPermissionClassName = modelPermissionClassName;
21
+ this.roleClassName = roleClassName;
22
+ this.map = map;
23
+ this.modelPermissionQuery = getModelPermissionModelQuery(this.modelPermissionClassName);
24
+ // this.modelPermissionTable = this.modelPermissionClassName.table
25
+ this.roleQuery = getRoleModelQuery(this.roleClassName);
26
+ this.roleTable = this.roleClassName.table;
14
27
  }
15
28
  models() {
16
29
  return this.modelService.allByPermission(this.permission.getModelId());
@@ -19,48 +32,44 @@ export default class PermissionHasModelRoles {
19
32
  return this.modelService.allByPermissionFor(modelType, this.permission.getModelId());
20
33
  }
21
34
  async roles() {
22
- const map = await morphMap();
23
35
  return this.roleService
24
- .roleModelPermissionQuery(map.getAlias(Role))
36
+ .roleModelPermissionQuery(this.map.getAlias(this.roleClassName))
25
37
  .where('mp.permission_id', this.permission.id);
26
38
  }
27
39
  async belongsToRole(role) {
28
- const map = await morphMap();
29
40
  const q = this.roleService
30
- .roleModelPermissionQuery(map.getAlias(Role))
41
+ .roleModelPermissionQuery(this.map.getAlias(this.roleClassName))
31
42
  .where('mp.permission_id', this.permission.id);
32
43
  if (typeof role === 'string') {
33
- q.where(Role.table + '.slug', role);
44
+ q.where(this.roleTable + '.slug', role);
34
45
  }
35
46
  else {
36
- q.where(Role.table + '.id', role);
47
+ q.where(this.roleTable + '.id', role);
37
48
  }
38
- const r = await q.select(Role.table + '.id').limit(1);
49
+ const r = await q.select(this.roleTable + '.id').limit(1);
39
50
  return r.length > 0;
40
51
  }
41
52
  async attachToRole(role, target) {
42
53
  if (typeof role === 'string') {
43
- const r = await Role.query().where('slug', role).first();
54
+ const r = await this.roleQuery.where('slug', role).first();
44
55
  if (!r) {
45
56
  throw new Error('Role not found');
46
57
  }
47
58
  role = r.id;
48
59
  }
49
- const map = await morphMap();
50
- const entity = await destructTarget(target);
51
- return this.permissionService.giveAll(map.getAlias(Role), role, [this.permission.slug], entity.targetClass, entity.targetId, true);
60
+ const entity = await destructTarget(this.map, target);
61
+ return this.permissionService.giveAll(this.map.getAlias(this.roleClassName), role, [this.permission.slug], entity.targetClass, entity.targetId, true);
52
62
  }
53
63
  async detachFromRole(role) {
54
64
  if (typeof role === 'string') {
55
- const r = await Role.query().where('slug', role).first();
65
+ const r = await this.roleQuery.where('slug', role).first();
56
66
  if (!r) {
57
67
  throw new Error('Role not found');
58
68
  }
59
69
  role = r.id;
60
70
  }
61
- const map = await morphMap();
62
- return ModelPermission.query()
63
- .where('model_type', map.getAlias(Role))
71
+ return this.modelPermissionQuery
72
+ .where('model_type', this.map.getAlias(this.roleClassName))
64
73
  .where('model_id', role)
65
74
  .delete();
66
75
  }