@holoyan/adonisjs-permissions 0.8.21 → 0.9.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/README.md +295 -4
- package/build/index.d.ts +1 -1
- package/build/index.js +1 -1
- package/build/providers/role_permission_provider.js +11 -0
- package/build/src/acl.d.ts +18 -7
- package/build/src/acl.js +43 -21
- package/build/src/decorators.d.ts +3 -1
- package/build/src/events/index.d.ts +2 -0
- package/build/src/events/index.js +2 -0
- package/build/src/events/permissions/permissions.d.ts +80 -0
- package/build/src/events/permissions/permissions.js +113 -0
- package/build/src/events/roles/roles.d.ts +40 -0
- package/build/src/events/roles/roles.js +55 -0
- package/build/src/mixins/has_permissions.d.ts +248 -79
- package/build/src/mixins/has_permissions.js +199 -23
- package/build/src/models/model_permission.d.ts +0 -1
- package/build/src/models/model_permission.js +0 -4
- package/build/src/models/model_role.d.ts +0 -1
- package/build/src/models/model_role.js +0 -4
- package/build/src/models/permission.d.ts +3 -4
- package/build/src/models/permission.js +2 -8
- package/build/src/models/role.d.ts +3 -4
- package/build/src/models/role.js +2 -8
- package/build/src/services/base_adapter.d.ts +10 -3
- package/build/src/services/base_adapter.js +30 -6
- package/build/src/services/base_service.d.ts +7 -3
- package/build/src/services/base_service.js +8 -4
- package/build/src/services/models/model_has_role_permissions.d.ts +185 -0
- package/build/src/services/models/model_has_role_permissions.js +346 -0
- package/build/src/services/{model_service.d.ts → models/model_service.d.ts} +7 -5
- package/build/src/services/{model_service.js → models/model_service.js} +6 -4
- package/build/src/services/permissions/empty_permission.d.ts +10 -8
- package/build/src/services/permissions/empty_permission.js +26 -10
- package/build/src/services/permissions/permission_has_model_roles.d.ts +24 -17
- package/build/src/services/permissions/permission_has_model_roles.js +48 -31
- package/build/src/services/permissions/permissions_service.d.ts +25 -23
- package/build/src/services/permissions/permissions_service.js +12 -11
- package/build/src/services/roles/empty_roles.d.ts +11 -8
- package/build/src/services/roles/empty_roles.js +27 -8
- package/build/src/services/roles/role_has_model_permissions.d.ts +71 -20
- package/build/src/services/roles/role_has_model_permissions.js +87 -19
- package/build/src/services/roles/roles_service.d.ts +8 -4
- package/build/src/services/roles/roles_service.js +15 -16
- package/build/src/types.d.ts +18 -7
- package/build/stubs/middlewares/acl_middleware.stub +1 -0
- package/build/stubs/migrations/create_db.stub +71 -56
- package/package.json +3 -2
- package/build/src/services/model_has_role_permissions.d.ts +0 -65
- package/build/src/services/model_has_role_permissions.js +0 -189
|
@@ -1,26 +1,35 @@
|
|
|
1
1
|
import { destructTarget } from '../helper.js';
|
|
2
|
-
import ModelService from '../model_service.js';
|
|
2
|
+
import ModelService from '../models/model_service.js';
|
|
3
3
|
import PermissionService from '../permissions/permissions_service.js';
|
|
4
4
|
import BaseAdapter from '../base_adapter.js';
|
|
5
|
+
import { PermissionsAttachedToRoleEvent, PermissionsDetachedFromRoleEvent, PermissionsFlushedFromRoleEvent, } from '../../events/index.js';
|
|
5
6
|
export class RoleHasModelPermissions extends BaseAdapter {
|
|
6
7
|
manager;
|
|
7
8
|
map;
|
|
8
9
|
options;
|
|
10
|
+
scope;
|
|
9
11
|
role;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
super(manager, map, options);
|
|
12
|
+
emitter;
|
|
13
|
+
constructor(manager, map, options, scope, role, emitter) {
|
|
14
|
+
super(manager, map, options, scope, emitter);
|
|
14
15
|
this.manager = manager;
|
|
15
16
|
this.map = map;
|
|
16
17
|
this.options = options;
|
|
18
|
+
this.scope = scope;
|
|
17
19
|
this.role = role;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
this.emitter = emitter;
|
|
21
|
+
}
|
|
22
|
+
get modelService() {
|
|
23
|
+
const modelPermission = this.manager.getModel('modelPermission');
|
|
24
|
+
const modelRole = this.manager.getModel('modelRole');
|
|
25
|
+
return new ModelService(this.options, this.scope, modelPermission, modelRole, this.map).setQueryOptions(this.queryOptions);
|
|
26
|
+
}
|
|
27
|
+
get permissionService() {
|
|
28
|
+
const roleClass = this.manager.getModel('role');
|
|
29
|
+
const modelPermission = this.manager.getModel('modelPermission');
|
|
30
|
+
const modelRole = this.manager.getModel('modelRole');
|
|
31
|
+
const permission = this.manager.getModel('permission');
|
|
32
|
+
return new PermissionService(this.options, this.scope, permission, roleClass, modelPermission, modelRole, this.map).setQueryOptions(this.queryOptions);
|
|
24
33
|
}
|
|
25
34
|
models() {
|
|
26
35
|
return this.modelService.all(+this.role.getModelId());
|
|
@@ -106,41 +115,100 @@ export class RoleHasModelPermissions extends BaseAdapter {
|
|
|
106
115
|
const entity = await destructTarget(this.map, target);
|
|
107
116
|
return this.permissionService.forbidden(this.map.getAlias(this.role), this.role.getModelId(), permission, entity.targetClass, entity.targetId);
|
|
108
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* calls giveAll()
|
|
120
|
+
* @param permission
|
|
121
|
+
* @param target
|
|
122
|
+
*/
|
|
109
123
|
assign(permission, target) {
|
|
110
|
-
return this.
|
|
124
|
+
return this.giveAll([permission], target);
|
|
111
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* calls giveAll()
|
|
128
|
+
* @param permission
|
|
129
|
+
* @param target
|
|
130
|
+
*/
|
|
112
131
|
allow(permission, target) {
|
|
113
|
-
return this.
|
|
132
|
+
return this.giveAll([permission], target);
|
|
114
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* calls giveAll()
|
|
136
|
+
* @param permission
|
|
137
|
+
* @param target
|
|
138
|
+
*/
|
|
115
139
|
async give(permission, target) {
|
|
116
|
-
|
|
117
|
-
return this.permissionService.giveAll(this.map.getAlias(this.role), this.role.getModelId(), [permission], entity.targetClass, entity.targetId, true);
|
|
140
|
+
return this.giveAll([permission], target);
|
|
118
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* @param permissions
|
|
144
|
+
* @param target
|
|
145
|
+
*/
|
|
119
146
|
async giveAll(permissions, target) {
|
|
120
147
|
const entity = await destructTarget(this.map, target);
|
|
121
|
-
|
|
148
|
+
const attached = await this.permissionService.giveAll(this.map.getAlias(this.role), this.role.getModelId(), permissions, entity.targetClass, entity.targetId, true);
|
|
149
|
+
if (attached.length > 0) {
|
|
150
|
+
this.fire(PermissionsAttachedToRoleEvent, attached.map((item) => item.permissionId), this.role.getModelId());
|
|
151
|
+
}
|
|
152
|
+
return attached;
|
|
122
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* calls giveAll()
|
|
156
|
+
* @param permissions
|
|
157
|
+
* @param target
|
|
158
|
+
*/
|
|
123
159
|
assignAll(permissions, target) {
|
|
124
160
|
return this.giveAll(permissions, target);
|
|
125
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* calls giveAll()
|
|
164
|
+
* @param permissions
|
|
165
|
+
* @param target
|
|
166
|
+
*/
|
|
126
167
|
allowAll(permissions, target) {
|
|
127
168
|
return this.giveAll(permissions, target);
|
|
128
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* calls revokeAll()
|
|
172
|
+
* @param permission
|
|
173
|
+
*/
|
|
129
174
|
async revokePermission(permission) {
|
|
130
|
-
return this.
|
|
175
|
+
return this.revokeAll([permission]);
|
|
131
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* calls revokeAll()
|
|
179
|
+
* @param permission
|
|
180
|
+
*/
|
|
132
181
|
async revoke(permission) {
|
|
133
182
|
return this.revokeAll([permission]);
|
|
134
183
|
}
|
|
135
184
|
async revokeAll(permissions, target) {
|
|
136
185
|
const entity = await destructTarget(this.map, target);
|
|
137
|
-
|
|
186
|
+
const revoked = await this.permissionService.revokeAll(this.map.getAlias(this.role), this.role.getModelId(), permissions, entity.targetClass, entity.targetId);
|
|
187
|
+
if (revoked.length > 0) {
|
|
188
|
+
this.fire(PermissionsDetachedFromRoleEvent, permissions, this.role.getModelId());
|
|
189
|
+
}
|
|
138
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* calls revokeAll()
|
|
193
|
+
* @param permissions
|
|
194
|
+
*/
|
|
139
195
|
async revokeAllPermissions(permissions) {
|
|
140
196
|
return this.revokeAll(permissions);
|
|
141
197
|
}
|
|
142
198
|
async flush() {
|
|
143
|
-
|
|
199
|
+
const flushed = await this.permissionService.flush(this.map.getAlias(this.role), this.role.getModelId());
|
|
200
|
+
if (flushed.length > 0) {
|
|
201
|
+
this.fire(PermissionsFlushedFromRoleEvent, this.role.getModelId());
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Sync permissions with the given list
|
|
206
|
+
* @param permissions - list of permissions
|
|
207
|
+
* @param target
|
|
208
|
+
*/
|
|
209
|
+
async sync(permissions, target) {
|
|
210
|
+
await this.flush();
|
|
211
|
+
return this.giveAll(permissions, target);
|
|
144
212
|
}
|
|
145
213
|
async forbid(permission, target) {
|
|
146
214
|
const entity = await destructTarget(this.map, target);
|
|
@@ -2,20 +2,23 @@ import { AclModel, ModelIdType, MorphInterface, OptionsInterface } from '../../t
|
|
|
2
2
|
import BaseService from '../base_service.js';
|
|
3
3
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
4
4
|
import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
|
|
5
|
+
import Role from '../../models/role.js';
|
|
6
|
+
import { Scope } from '../../scope.js';
|
|
5
7
|
export default class RolesService extends BaseService {
|
|
6
8
|
protected options: OptionsInterface;
|
|
7
|
-
protected
|
|
9
|
+
protected scope: Scope;
|
|
10
|
+
protected roleClassName: typeof Role;
|
|
8
11
|
protected modelPermissionClassName: typeof BaseModel;
|
|
9
12
|
protected modelRoleClassName: typeof BaseModel;
|
|
10
13
|
protected map: MorphInterface;
|
|
11
14
|
private readonly roleTable;
|
|
12
15
|
private readonly modelPermissionTable;
|
|
13
16
|
private readonly modelRoleTable;
|
|
14
|
-
constructor(options: OptionsInterface, roleClassName: typeof
|
|
17
|
+
constructor(options: OptionsInterface, scope: Scope, roleClassName: typeof Role, modelPermissionClassName: typeof BaseModel, modelRoleClassName: typeof BaseModel, map: MorphInterface);
|
|
15
18
|
private modelRolesQuery;
|
|
16
19
|
private get roleQuery();
|
|
17
20
|
private get modelRoleQuery();
|
|
18
|
-
all(modelType: string, modelId: ModelIdType): ModelQueryBuilderContract<
|
|
21
|
+
all(modelType: string, modelId: ModelIdType): ModelQueryBuilderContract<typeof Role, Role>;
|
|
19
22
|
has(modelType: string, modelId: ModelIdType, role: string): Promise<boolean>;
|
|
20
23
|
hasAll(modelType: string, modelId: ModelIdType, roles: string[]): Promise<boolean>;
|
|
21
24
|
hasAny(modelType: string, modelId: ModelIdType, roles: string[]): Promise<boolean>;
|
|
@@ -24,8 +27,9 @@ export default class RolesService extends BaseService {
|
|
|
24
27
|
revoke(role: string, model: AclModel): Promise<boolean>;
|
|
25
28
|
revokeAll(roles: string[], model: AclModel): Promise<boolean>;
|
|
26
29
|
private extractRoleModel;
|
|
27
|
-
roleModelPermissionQuery(modelType: string): ModelQueryBuilderContract<
|
|
30
|
+
roleModelPermissionQuery(modelType: string): ModelQueryBuilderContract<typeof Role, Role>;
|
|
28
31
|
flush(modelType: string, modelId: ModelIdType): ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, any>;
|
|
29
32
|
private applyScopes;
|
|
30
33
|
private applyModelRoleScopes;
|
|
34
|
+
findBySlug(slug: string): Promise<Role | null>;
|
|
31
35
|
}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import BaseService from '../base_service.js';
|
|
2
|
-
import {
|
|
3
|
-
// getModelPermissionModelQuery,
|
|
4
|
-
getModelRoleModelQuery,
|
|
5
|
-
// getPermissionModelQuery,
|
|
6
|
-
getRoleModelQuery, } from '../query_helper.js';
|
|
2
|
+
import { getModelRoleModelQuery } from '../query_helper.js';
|
|
7
3
|
export default class RolesService extends BaseService {
|
|
8
4
|
options;
|
|
5
|
+
scope;
|
|
9
6
|
roleClassName;
|
|
10
7
|
modelPermissionClassName;
|
|
11
8
|
modelRoleClassName;
|
|
@@ -14,11 +11,10 @@ export default class RolesService extends BaseService {
|
|
|
14
11
|
// private modelPermissionQuery
|
|
15
12
|
modelPermissionTable;
|
|
16
13
|
modelRoleTable;
|
|
17
|
-
constructor(options, roleClassName,
|
|
18
|
-
|
|
19
|
-
modelPermissionClassName, modelRoleClassName, map) {
|
|
20
|
-
super(options);
|
|
14
|
+
constructor(options, scope, roleClassName, modelPermissionClassName, modelRoleClassName, map) {
|
|
15
|
+
super(options, scope);
|
|
21
16
|
this.options = options;
|
|
17
|
+
this.scope = scope;
|
|
22
18
|
this.roleClassName = roleClassName;
|
|
23
19
|
this.modelPermissionClassName = modelPermissionClassName;
|
|
24
20
|
this.modelRoleClassName = modelRoleClassName;
|
|
@@ -34,8 +30,8 @@ export default class RolesService extends BaseService {
|
|
|
34
30
|
.where('mr.model_id', modelId);
|
|
35
31
|
}
|
|
36
32
|
get roleQuery() {
|
|
37
|
-
const q =
|
|
38
|
-
this.applyScopes(q, this.scope);
|
|
33
|
+
const q = this.roleClassName.query(this.getQueryOptions());
|
|
34
|
+
this.applyScopes(q, this.scope.get());
|
|
39
35
|
return q;
|
|
40
36
|
}
|
|
41
37
|
get modelRoleQuery() {
|
|
@@ -103,8 +99,8 @@ export default class RolesService extends BaseService {
|
|
|
103
99
|
roleId: id,
|
|
104
100
|
});
|
|
105
101
|
}
|
|
106
|
-
await this.modelRoleClassName.createMany(data, this.getQueryOptions());
|
|
107
|
-
return
|
|
102
|
+
const created = await this.modelRoleClassName.createMany(data, this.getQueryOptions());
|
|
103
|
+
return created.length === data.length;
|
|
108
104
|
}
|
|
109
105
|
async revoke(role, model) {
|
|
110
106
|
return this.revokeAll([role], model);
|
|
@@ -123,9 +119,9 @@ export default class RolesService extends BaseService {
|
|
|
123
119
|
query.orWhereIn('r.id', ids);
|
|
124
120
|
}
|
|
125
121
|
});
|
|
126
|
-
this.applyModelRoleScopes(q, 'r', this.scope);
|
|
127
|
-
await q.delete();
|
|
128
|
-
return
|
|
122
|
+
this.applyModelRoleScopes(q, 'r', this.scope.get());
|
|
123
|
+
const d = await q.delete();
|
|
124
|
+
return d.length > 0;
|
|
129
125
|
}
|
|
130
126
|
extractRoleModel(roles) {
|
|
131
127
|
return this.roleQuery.whereIn('slug', roles);
|
|
@@ -144,4 +140,7 @@ export default class RolesService extends BaseService {
|
|
|
144
140
|
applyModelRoleScopes(q, table, scope) {
|
|
145
141
|
q.where(table + '.scope', scope);
|
|
146
142
|
}
|
|
143
|
+
findBySlug(slug) {
|
|
144
|
+
return this.roleQuery.where('slug', slug).first();
|
|
145
|
+
}
|
|
147
146
|
}
|
package/build/src/types.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { LucidModel, ModelAdapterOptions } from '@adonisjs/lucid/types/model';
|
|
2
2
|
import { DateTime } from 'luxon';
|
|
3
|
-
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
4
3
|
import { Scope } from './scope.js';
|
|
4
|
+
import Permission from './models/permission.js';
|
|
5
|
+
import Role from './models/role.js';
|
|
6
|
+
import ModelPermission from './models/model_permission.js';
|
|
7
|
+
import ModelRole from './models/model_role.js';
|
|
8
|
+
import { BaseEvent } from '@adonisjs/core/events';
|
|
5
9
|
export interface AclModelInterface {
|
|
6
10
|
getModelId(): ModelIdType;
|
|
7
11
|
}
|
|
@@ -10,7 +14,7 @@ export interface PermissionInterface extends AclModelInterface {
|
|
|
10
14
|
slug: string;
|
|
11
15
|
title: string | null;
|
|
12
16
|
entityType: string;
|
|
13
|
-
entityId:
|
|
17
|
+
entityId: ModelIdType | null;
|
|
14
18
|
allowed: boolean;
|
|
15
19
|
scope: string;
|
|
16
20
|
createdAt: DateTime;
|
|
@@ -21,7 +25,7 @@ export interface RoleInterface extends AclModelInterface {
|
|
|
21
25
|
slug: string;
|
|
22
26
|
title: string | null;
|
|
23
27
|
entityType: string;
|
|
24
|
-
entityId:
|
|
28
|
+
entityId: ModelIdType | null;
|
|
25
29
|
scope: string;
|
|
26
30
|
allowed: boolean;
|
|
27
31
|
createdAt: DateTime;
|
|
@@ -78,7 +82,14 @@ export interface MorphInterface {
|
|
|
78
82
|
export interface ModelManagerInterface {
|
|
79
83
|
[key: string]: any;
|
|
80
84
|
}
|
|
85
|
+
interface EventInterface<E extends BaseEvent = BaseEvent> {
|
|
86
|
+
fire: boolean;
|
|
87
|
+
except?: E[];
|
|
88
|
+
only?: E[];
|
|
89
|
+
}
|
|
81
90
|
export interface OptionsInterface extends ModelManagerInterface {
|
|
91
|
+
queryOptions?: ModelAdapterOptions;
|
|
92
|
+
events: EventInterface;
|
|
82
93
|
}
|
|
83
94
|
export interface Permissions {
|
|
84
95
|
tables: Object;
|
|
@@ -92,10 +103,10 @@ export interface ScopeInterface {
|
|
|
92
103
|
}
|
|
93
104
|
export interface ModelManagerBindings {
|
|
94
105
|
scope: typeof Scope;
|
|
95
|
-
role: typeof
|
|
96
|
-
permission: typeof
|
|
97
|
-
modelRole: typeof
|
|
98
|
-
modelPermission: typeof
|
|
106
|
+
role: typeof Role;
|
|
107
|
+
permission: typeof Permission;
|
|
108
|
+
modelRole: typeof ModelRole;
|
|
109
|
+
modelPermission: typeof ModelPermission;
|
|
99
110
|
queryClient: ModelAdapterOptions;
|
|
100
111
|
}
|
|
101
112
|
export interface AclMiddlewareOptions {
|
|
@@ -17,6 +17,7 @@ export default class UserScopeMiddleware {
|
|
|
17
17
|
const scope = new Scope()
|
|
18
18
|
ctx.acl = new AclManager(true).scope(scope)
|
|
19
19
|
/**
|
|
20
|
+
* Call next method in the pipeline and return its output
|
|
20
21
|
* Call next method in the pipeline and return its output
|
|
21
22
|
*/
|
|
22
23
|
const output = await next()
|
|
@@ -8,7 +8,30 @@ import config from '@adonisjs/core/services/config'
|
|
|
8
8
|
|
|
9
9
|
export default class extends BaseSchema {
|
|
10
10
|
async up() {
|
|
11
|
-
this.schema.createTable(
|
|
11
|
+
this.schema.createTable(
|
|
12
|
+
config.get('permissions.permissionsConfig.tables.permissions'),
|
|
13
|
+
(table) => {
|
|
14
|
+
this.primaryKey(table, 'id')
|
|
15
|
+
|
|
16
|
+
table.string('slug')
|
|
17
|
+
table.string('title').nullable()
|
|
18
|
+
table.string('entity_type').defaultTo('*')
|
|
19
|
+
this.modelId(table, 'entity_id').nullable()
|
|
20
|
+
table.string('scope').defaultTo('default')
|
|
21
|
+
table.boolean('allowed').defaultTo(true)
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL
|
|
25
|
+
*/
|
|
26
|
+
table.timestamp('created_at', { useTz: true })
|
|
27
|
+
table.timestamp('updated_at', { useTz: true })
|
|
28
|
+
|
|
29
|
+
table.index(['scope', 'slug'])
|
|
30
|
+
table.index(['entity_type', 'entity_id'])
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
this.schema.createTable(config.get('permissions.permissionsConfig.tables.roles'), (table) => {
|
|
12
35
|
this.primaryKey(table, 'id')
|
|
13
36
|
|
|
14
37
|
table.string('slug')
|
|
@@ -28,61 +51,53 @@ export default class extends BaseSchema {
|
|
|
28
51
|
table.index(['entity_type', 'entity_id'])
|
|
29
52
|
})
|
|
30
53
|
|
|
31
|
-
this.schema.createTable(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
*/
|
|
79
|
-
table.timestamp('created_at', { useTz: true })
|
|
80
|
-
table.timestamp('updated_at', { useTz: true })
|
|
81
|
-
|
|
82
|
-
table.index(['model_type', 'model_id'])
|
|
83
|
-
|
|
84
|
-
table.foreign('permission_id').references('permissions.id').onDelete('CASCADE')
|
|
85
|
-
})
|
|
54
|
+
this.schema.createTable(
|
|
55
|
+
config.get('permissions.permissionsConfig.tables.modelRoles'),
|
|
56
|
+
(table) => {
|
|
57
|
+
table.bigIncrements('id')
|
|
58
|
+
|
|
59
|
+
table.string('model_type')
|
|
60
|
+
this.modelId(table, 'model_id')
|
|
61
|
+
this.modelId(table, 'role_id')
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL
|
|
65
|
+
*/
|
|
66
|
+
table.timestamp('created_at', { useTz: true })
|
|
67
|
+
table.timestamp('updated_at', { useTz: true })
|
|
68
|
+
|
|
69
|
+
table.index(['model_type', 'model_id'])
|
|
70
|
+
|
|
71
|
+
table
|
|
72
|
+
.foreign('role_id')
|
|
73
|
+
.references(config.get('permissions.permissionsConfig.tables.roles') + '.id')
|
|
74
|
+
.onDelete('CASCADE')
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
this.schema.createTable(
|
|
79
|
+
config.get('permissions.permissionsConfig.tables.modelPermissions'),
|
|
80
|
+
(table) => {
|
|
81
|
+
table.bigIncrements('id')
|
|
82
|
+
|
|
83
|
+
table.string('model_type')
|
|
84
|
+
this.modelId(table, 'model_id')
|
|
85
|
+
this.modelId(table, 'permission_id')
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL
|
|
89
|
+
*/
|
|
90
|
+
table.timestamp('created_at', { useTz: true })
|
|
91
|
+
table.timestamp('updated_at', { useTz: true })
|
|
92
|
+
|
|
93
|
+
table.index(['model_type', 'model_id'])
|
|
94
|
+
|
|
95
|
+
table
|
|
96
|
+
.foreign('permission_id')
|
|
97
|
+
.references(config.get('permissions.permissionsConfig.tables.permissions') + '.id')
|
|
98
|
+
.onDelete('CASCADE')
|
|
99
|
+
}
|
|
100
|
+
)
|
|
86
101
|
}
|
|
87
102
|
|
|
88
103
|
async down() {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@holoyan/adonisjs-permissions",
|
|
3
3
|
"description": "Adonisjs roles and permissions system",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.9.0",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=18.16.0"
|
|
7
7
|
},
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"exports": {
|
|
19
19
|
".": "./build/index.js",
|
|
20
20
|
"./role_permission_provider": "./build/providers/role_permission_provider.js",
|
|
21
|
-
"./types": "./build/src/types.js"
|
|
21
|
+
"./types": "./build/src/types.js",
|
|
22
|
+
"./events": "./build/src/events/index.js"
|
|
22
23
|
},
|
|
23
24
|
"scripts": {
|
|
24
25
|
"clean": "del-cli build",
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { AclModel, MorphInterface, OptionsInterface } from '../types.js';
|
|
2
|
-
import RolesService from './roles/roles_service.js';
|
|
3
|
-
import BaseAdapter from './base_adapter.js';
|
|
4
|
-
import ModelManager from '../model_manager.js';
|
|
5
|
-
import PermissionService from './permissions/permissions_service.js';
|
|
6
|
-
export declare class ModelHasRolePermissions extends BaseAdapter {
|
|
7
|
-
protected manager: ModelManager;
|
|
8
|
-
protected map: MorphInterface;
|
|
9
|
-
protected options: OptionsInterface;
|
|
10
|
-
private model;
|
|
11
|
-
protected roleService: RolesService;
|
|
12
|
-
protected permissionService: PermissionService;
|
|
13
|
-
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface, model: AclModel);
|
|
14
|
-
roles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
15
|
-
hasRole(role: string): Promise<boolean>;
|
|
16
|
-
hasAllRoles(...roles: string[]): Promise<boolean>;
|
|
17
|
-
hasAnyRole(...roles: string[]): Promise<boolean>;
|
|
18
|
-
assignRole(role: string): Promise<boolean>;
|
|
19
|
-
assign(role: string): Promise<boolean>;
|
|
20
|
-
assignAllRoles(...roles: string[]): Promise<boolean>;
|
|
21
|
-
revokeRole(role: string): Promise<boolean>;
|
|
22
|
-
revokeAllRoles(...roles: string[]): Promise<boolean>;
|
|
23
|
-
flushRoles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, any>;
|
|
24
|
-
permissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
25
|
-
globalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
26
|
-
onResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
27
|
-
directPermissions(includeForbiddings?: boolean): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
28
|
-
/**
|
|
29
|
-
* Get permission through roles
|
|
30
|
-
* @param includeForbiddings
|
|
31
|
-
*/
|
|
32
|
-
rolePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
33
|
-
directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
34
|
-
directResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
35
|
-
containsPermission(permission: string): Promise<boolean>;
|
|
36
|
-
contains(permission: string): Promise<boolean>;
|
|
37
|
-
containsAllPermissions(permissions: string[]): Promise<boolean>;
|
|
38
|
-
containsAnyPermission(permissions: string[]): Promise<boolean>;
|
|
39
|
-
containsDirectPermission(permission: string): Promise<boolean>;
|
|
40
|
-
containsAllPermissionsDirectly(permissions: string[]): Promise<boolean>;
|
|
41
|
-
containsAnyPermissionDirectly(permissions: string[]): Promise<boolean>;
|
|
42
|
-
hasPermission(permission: string, target?: AclModel | Function): Promise<boolean>;
|
|
43
|
-
hasAllPermissions(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
44
|
-
hasAnyPermission(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
45
|
-
hasAnyDirectPermission(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
46
|
-
hasDirectPermission(permission: string, target?: AclModel | Function): Promise<boolean>;
|
|
47
|
-
hasAllPermissionsDirect(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
48
|
-
can(permission: string, target?: AclModel | Function): Promise<boolean>;
|
|
49
|
-
canAll(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
50
|
-
canAny(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
51
|
-
assignDirectPermission(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
52
|
-
assignDirectAllPermissions(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
53
|
-
allow(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
54
|
-
allowAll(permission: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
55
|
-
revokePermission(permission: string, target?: AclModel | Function): Promise<any[]>;
|
|
56
|
-
revoke(permission: string, target?: AclModel | Function): Promise<any[]>;
|
|
57
|
-
revokeAll(permissions: string[], target?: AclModel | Function): Promise<any[]>;
|
|
58
|
-
revokeAllPermissions(permissions: string[], target?: AclModel | Function): Promise<any[]>;
|
|
59
|
-
flushPermissions(): Promise<any[]>;
|
|
60
|
-
flush(): Promise<boolean>;
|
|
61
|
-
forbid(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
62
|
-
forbidAll(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
63
|
-
unforbidAll(permissions: string[], target?: AclModel | Function): Promise<any[]>;
|
|
64
|
-
unforbid(permission: string, target?: AclModel | Function): Promise<any[]>;
|
|
65
|
-
}
|