@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.
- package/README.md +160 -59
- package/build/index.d.ts +10 -4
- package/build/index.js +10 -5
- package/build/providers/role_permission_provider.d.ts +3 -0
- package/build/providers/role_permission_provider.js +21 -0
- package/build/src/acl.d.ts +10 -5
- package/build/src/acl.js +17 -9
- package/build/src/decorators.js +1 -0
- package/build/src/mixins/has_permissions.d.ts +58 -26
- package/build/src/mixins/has_permissions.js +123 -18
- package/build/src/model_manager.d.ts +7 -0
- package/build/src/model_manager.js +15 -0
- package/build/src/models/permission.d.ts +4 -4
- package/build/src/models/permission.js +2 -7
- package/build/src/models/role.d.ts +1 -1
- package/build/src/models/role.js +2 -7
- package/build/src/morph_map.d.ts +5 -2
- package/build/src/morph_map.js +16 -9
- package/build/src/services/helper.d.ts +2 -3
- package/build/src/services/helper.js +1 -7
- package/build/src/services/model_has_role_permissions.d.ts +41 -39
- package/build/src/services/model_has_role_permissions.js +92 -111
- package/build/src/services/model_service.d.ts +15 -6
- package/build/src/services/model_service.js +39 -14
- package/build/src/services/permissions/empty_permission.d.ts +8 -0
- package/build/src/services/permissions/empty_permission.js +17 -0
- package/build/src/services/permissions/permission_has_model_roles.d.ts +12 -8
- package/build/src/services/permissions/permission_has_model_roles.js +28 -19
- package/build/src/services/permissions/permissions_service.d.ts +42 -30
- package/build/src/services/permissions/permissions_service.js +198 -155
- package/build/src/services/query_helper.d.ts +7 -0
- package/build/src/services/query_helper.js +12 -0
- package/build/src/services/roles/empty_roles.d.ts +8 -0
- package/build/src/services/roles/empty_roles.js +17 -0
- package/build/src/services/roles/role_has_model_permissions.d.ts +32 -33
- package/build/src/services/roles/role_has_model_permissions.js +64 -78
- package/build/src/services/roles/roles_service.d.ts +20 -9
- package/build/src/services/roles/roles_service.js +90 -34
- package/build/src/types.d.ts +65 -5
- package/build/stubs/configs/permissions.stub +1 -1
- package/build/stubs/migrations/create_db.stub +8 -8
- package/package.json +3 -1
- package/build/src/mixins/has_role_permissions.d.ts +0 -128
- package/build/src/mixins/has_role_permissions.js +0 -10
- package/build/src/mixins/has_roles.d.ts +0 -1
- package/build/src/mixins/has_roles.js +0 -47
|
@@ -1,172 +1,153 @@
|
|
|
1
|
-
import { destructTarget, formatList
|
|
1
|
+
import { destructTarget, formatList } from './helper.js';
|
|
2
2
|
export class ModelHasRolePermissions {
|
|
3
3
|
model;
|
|
4
4
|
roleService;
|
|
5
5
|
permissionsService;
|
|
6
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
-
|
|
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
|
-
|
|
21
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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(
|
|
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(
|
|
42
|
-
|
|
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(
|
|
46
|
-
|
|
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(
|
|
50
|
-
|
|
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(
|
|
54
|
-
|
|
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(
|
|
58
|
-
|
|
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(
|
|
62
|
-
const
|
|
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(
|
|
67
|
-
const
|
|
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(
|
|
72
|
-
const
|
|
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(
|
|
77
|
-
const
|
|
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
|
-
|
|
82
|
-
|
|
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(
|
|
87
|
-
const
|
|
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(
|
|
92
|
-
return this.hasAnyPermission([
|
|
82
|
+
async hasPermission(permission, target) {
|
|
83
|
+
return this.hasAnyPermission([permission], target);
|
|
93
84
|
}
|
|
94
|
-
async hasAllPermissions(
|
|
95
|
-
const
|
|
96
|
-
|
|
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(
|
|
101
|
-
const
|
|
102
|
-
|
|
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(
|
|
107
|
-
const
|
|
108
|
-
|
|
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(
|
|
113
|
-
return this.hasAnyDirectPermission([
|
|
97
|
+
async hasDirectPermission(permission, target) {
|
|
98
|
+
return this.hasAnyDirectPermission([permission], target);
|
|
114
99
|
}
|
|
115
|
-
async hasAllPermissionsDirect(
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
|
|
122
|
-
return this.
|
|
107
|
+
canAll(permissions, target) {
|
|
108
|
+
return this.hasAllPermissions(permissions, target);
|
|
123
109
|
}
|
|
124
|
-
|
|
125
|
-
return this.
|
|
110
|
+
canAny(permissions, target) {
|
|
111
|
+
return this.hasAnyPermission(permissions, target);
|
|
126
112
|
}
|
|
127
|
-
|
|
128
|
-
|
|
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
|
|
131
|
-
const
|
|
132
|
-
|
|
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(
|
|
136
|
-
return this.assignDirectPermission(
|
|
121
|
+
allow(permission, target) {
|
|
122
|
+
return this.assignDirectPermission(permission, target);
|
|
137
123
|
}
|
|
138
|
-
async revokePermission(
|
|
139
|
-
return this.revokeAllPermissions([
|
|
124
|
+
async revokePermission(permission, target) {
|
|
125
|
+
return this.revokeAllPermissions([permission], target);
|
|
140
126
|
}
|
|
141
|
-
async revokeAllPermissions(
|
|
142
|
-
const
|
|
143
|
-
|
|
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
|
-
|
|
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
|
-
|
|
152
|
-
await this.
|
|
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(
|
|
157
|
-
return this.forbidAll([
|
|
139
|
+
async forbid(permission, target) {
|
|
140
|
+
return this.forbidAll([permission], target);
|
|
158
141
|
}
|
|
159
|
-
async forbidAll(
|
|
160
|
-
const
|
|
161
|
-
|
|
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(
|
|
165
|
-
const
|
|
166
|
-
|
|
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(
|
|
170
|
-
return this.unforbidAll([
|
|
150
|
+
async unforbid(permission, target) {
|
|
151
|
+
return this.unforbidAll([permission], target);
|
|
171
152
|
}
|
|
172
153
|
}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
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<
|
|
7
|
-
allByPermissionFor(modelType: string,
|
|
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
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
33
|
+
return this.modelRoleQuery.where('role_id', roleId);
|
|
7
34
|
}
|
|
8
35
|
async allFor(modelType, roleId) {
|
|
9
|
-
const
|
|
10
|
-
const modelClass = map.get(modelType);
|
|
36
|
+
const modelClass = this.map.get(modelType);
|
|
11
37
|
return modelClass
|
|
12
38
|
.query()
|
|
13
|
-
.join(
|
|
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
|
|
44
|
+
return this.modelPermissionQuery
|
|
19
45
|
.where('permission_id', permissionId)
|
|
20
46
|
.groupBy(['model_type', 'model_id']);
|
|
21
47
|
}
|
|
22
|
-
async allByPermissionFor(modelType,
|
|
23
|
-
const
|
|
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(
|
|
28
|
-
.where('mp.permission_id',
|
|
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
|
|
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
|
-
|
|
14
|
-
|
|
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<
|
|
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<
|
|
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
|
|
2
|
-
import
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
44
|
+
q.where(this.roleTable + '.slug', role);
|
|
34
45
|
}
|
|
35
46
|
else {
|
|
36
|
-
q.where(
|
|
47
|
+
q.where(this.roleTable + '.id', role);
|
|
37
48
|
}
|
|
38
|
-
const r = await q.select(
|
|
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
|
|
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
|
|
50
|
-
|
|
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
|
|
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
|
-
|
|
62
|
-
|
|
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
|
}
|