@holoyan/adonisjs-permissions 0.8.23 → 0.10.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 +155 -7
- 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 +17 -6
- package/build/src/acl.js +42 -20
- 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 +15 -18
- 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 +117 -25
- package/build/src/services/models/model_has_role_permissions.js +152 -33
- package/build/src/services/models/model_service.d.ts +3 -1
- package/build/src/services/models/model_service.js +4 -2
- 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 +23 -16
- package/build/src/services/permissions/permission_has_model_roles.js +47 -30
- 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 +65 -20
- package/build/src/services/roles/role_has_model_permissions.js +77 -18
- 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 +10 -6
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Role permissions system for AdonisJS V6+
|
|
2
2
|
|
|
3
|
+
Checkout other AdonisJS packages
|
|
4
|
+
|
|
5
|
+
- [AdonisJs activity log](https://github.com/holoyan/adonisjs-activitylog)
|
|
6
|
+
|
|
3
7
|
[//]: # ([](https://github.com/holoyan/adonisjs-permissions/actions/workflows/test.yml))
|
|
4
8
|
[](https://github.com/holoyan/adonisjs-permissions/blob/master/LICENSE.md)
|
|
5
9
|
|
|
@@ -7,6 +11,10 @@
|
|
|
7
11
|
|
|
8
12
|
- It's simple, just star this repository, that is enough to keep me motivated to maintain this package.
|
|
9
13
|
|
|
14
|
+
## Release Notes
|
|
15
|
+
|
|
16
|
+
Version: >= v0.10.0
|
|
17
|
+
* Added [Morph Map](https://github.com/holoyan/morph-map-js) as a dependency to handle polymorphic relations - fixed [#20](https://github.com/holoyan/adonisjs-permissions/issues/20)
|
|
10
18
|
|
|
11
19
|
## Table of Contents
|
|
12
20
|
|
|
@@ -45,9 +53,11 @@
|
|
|
45
53
|
- [The Scope middleware](#the-scope-middleware)
|
|
46
54
|
- [Default Scope](#default-scope-tenant)
|
|
47
55
|
- [Transactions](#transactions)
|
|
56
|
+
- [Events](#events)
|
|
48
57
|
- [Cheat sheet](#cheat-sheet)
|
|
49
58
|
- [Todo](#todo)
|
|
50
59
|
- [Test](#test)
|
|
60
|
+
- [Version Map](#version-map)
|
|
51
61
|
- [License](#license)
|
|
52
62
|
</p></details>
|
|
53
63
|
|
|
@@ -77,7 +87,7 @@ To be able to use the full power of Acl, you should have a clear understanding o
|
|
|
77
87
|
|
|
78
88
|
## Installation
|
|
79
89
|
|
|
80
|
-
npm i @holoyan/adonisjs-permissions@0.
|
|
90
|
+
npm i @holoyan/adonisjs-permissions@0.10.0
|
|
81
91
|
|
|
82
92
|
|
|
83
93
|
Next publish config files
|
|
@@ -130,11 +140,6 @@ export default class Post extends BaseModel implements AclModelInterface {
|
|
|
130
140
|
|
|
131
141
|
```
|
|
132
142
|
|
|
133
|
-
## Release Notes
|
|
134
|
-
|
|
135
|
-
Version: >= 'v0.8.21'
|
|
136
|
-
* Added `sync` methods
|
|
137
|
-
|
|
138
143
|
## Mixins
|
|
139
144
|
|
|
140
145
|
If you want to be able to call `Acl` methods on a `User` model then consider using `hasPermissions` mixin
|
|
@@ -987,6 +992,139 @@ await trx.commit()
|
|
|
987
992
|
```
|
|
988
993
|
|
|
989
994
|
|
|
995
|
+
### Events
|
|
996
|
+
|
|
997
|
+
`Acl` has built-in events that you can listen to. All they are class-based. To listen to the events, you can use `emitter`
|
|
998
|
+
|
|
999
|
+
```typescript
|
|
1000
|
+
import emitter from '@adonisjs/core/services/emitter'
|
|
1001
|
+
import { PermissionsAttachedToModelEvent } from '@holoyan/adonisjs-permissions/events'
|
|
1002
|
+
|
|
1003
|
+
emitter.on(PermissionsAttachedToModelEvent, (event) => {
|
|
1004
|
+
console.log('permission attached to the model')
|
|
1005
|
+
console.log(event.model) // lucid model instance
|
|
1006
|
+
console.log(event.permissionIds) // array of permission ids
|
|
1007
|
+
})
|
|
1008
|
+
|
|
1009
|
+
await Acl.model(myUser).allow('create')
|
|
1010
|
+
|
|
1011
|
+
```
|
|
1012
|
+
|
|
1013
|
+
|
|
1014
|
+
You can also disable events per query by calling withoutEvents() method
|
|
1015
|
+
|
|
1016
|
+
```typescript
|
|
1017
|
+
|
|
1018
|
+
emitter.on(RoleCreatedEvent, () => {
|
|
1019
|
+
console.log('Role created') // this will not be called
|
|
1020
|
+
})
|
|
1021
|
+
|
|
1022
|
+
//
|
|
1023
|
+
await Acl.role().withoutEvents().create({ // this one will not trigger RoleCreatedEvent
|
|
1024
|
+
slug: 'admin',
|
|
1025
|
+
})
|
|
1026
|
+
|
|
1027
|
+
await Acl.role().create({ // this will trigger
|
|
1028
|
+
slug: 'admin',
|
|
1029
|
+
})
|
|
1030
|
+
|
|
1031
|
+
```
|
|
1032
|
+
|
|
1033
|
+
If you want to completely disable events, you can do that by calling `withoutEvents()` method on the `Acl` class
|
|
1034
|
+
|
|
1035
|
+
```typescript
|
|
1036
|
+
|
|
1037
|
+
Acl.withoutEvents()
|
|
1038
|
+
|
|
1039
|
+
// any method called on the Acl will not trigger any events
|
|
1040
|
+
emitter.on(RoleCreatedEvent, () => {
|
|
1041
|
+
console.log('Role created') // this will not be called
|
|
1042
|
+
})
|
|
1043
|
+
|
|
1044
|
+
await Acl.role().create({ // this will not trigger because globaly withoutEvents() is set
|
|
1045
|
+
slug: 'admin',
|
|
1046
|
+
})
|
|
1047
|
+
```
|
|
1048
|
+
|
|
1049
|
+
List of events you can listen to:
|
|
1050
|
+
|
|
1051
|
+
```
|
|
1052
|
+
|
|
1053
|
+
// Permission events
|
|
1054
|
+
|
|
1055
|
+
PermissionCreatedEvent { // only if you use Acl.permission().create() method
|
|
1056
|
+
permission: Permission // created permission instance
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
PermissionDeletedEvent {
|
|
1060
|
+
permission: string // slug of deleted permission
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
PermissionsAttachedToRoleEvent {
|
|
1064
|
+
permissionIds: ModelIdType[],
|
|
1065
|
+
roleId: ModelIdType
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
PermissionsDetachedFromRoleEvent {
|
|
1069
|
+
permissions: string[],
|
|
1070
|
+
roleId: ModelIdType
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
PermissionsAttachedToModelEvent<T extends LucidModel>{
|
|
1074
|
+
permissionIds: ModelIdType[],
|
|
1075
|
+
model: T
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
PermissionsDetachedFromModelEvent<T extends LucidModel>{
|
|
1079
|
+
permissions: string[],
|
|
1080
|
+
model: T
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
PermissionsFlushedEvent<T extends LucidModel> {
|
|
1084
|
+
model: T
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
PermissionsForbadeEvent<T extends LucidModel> {
|
|
1088
|
+
permissionIds: ModelIdType[],
|
|
1089
|
+
model: T
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
PermissionsUnForbadeEvent<T extends LucidModel> {
|
|
1093
|
+
permissionIds: ModelIdType[],
|
|
1094
|
+
model: T
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
PermissionsFlushedFromRoleEvent{
|
|
1098
|
+
roleId: ModelIdType
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
// Role events
|
|
1102
|
+
|
|
1103
|
+
RoleCreatedEvent {
|
|
1104
|
+
role: Role // created role instance
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
RoleDeletedEvent {
|
|
1108
|
+
role: string // slug of deleted role
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
RolesAttachedToModel<T extends LucidModel> {
|
|
1112
|
+
roles: string[], // array of role slugs
|
|
1113
|
+
model: T // lucid model instance
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
RolesDetachedFromModelEvent<T extends LucidModel> {
|
|
1117
|
+
roles: string[], // array of role slugs
|
|
1118
|
+
model: T // lucid model instance
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
RolesFlushedFromModelEvent {
|
|
1122
|
+
model: T // lucid model instance
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
```
|
|
1126
|
+
|
|
1127
|
+
|
|
990
1128
|
## Cheat sheet
|
|
991
1129
|
|
|
992
1130
|
Model methods
|
|
@@ -1133,7 +1271,7 @@ await Acl.permission(myPermission).detachFromRole(role_slug)
|
|
|
1133
1271
|
|
|
1134
1272
|
- [X] Scopes (Multitenancy)
|
|
1135
1273
|
- [X] UUID support
|
|
1136
|
-
- [
|
|
1274
|
+
- [X] Events
|
|
1137
1275
|
- [ ] More test coverage
|
|
1138
1276
|
- [ ] Caching
|
|
1139
1277
|
- [ ] Integration with AdonisJs Bouncer
|
|
@@ -1143,6 +1281,16 @@ await Acl.permission(myPermission).detachFromRole(role_slug)
|
|
|
1143
1281
|
npm run test
|
|
1144
1282
|
|
|
1145
1283
|
|
|
1284
|
+
## Version Map
|
|
1285
|
+
|
|
1286
|
+
|
|
1287
|
+
| AdonisJS Lucid version | Package version |
|
|
1288
|
+
|------------------------|-----------------|
|
|
1289
|
+
| v20.x | 0.10.x |
|
|
1290
|
+
| v21.x | 1.x |
|
|
1291
|
+
|
|
1292
|
+
|
|
1293
|
+
|
|
1146
1294
|
## License
|
|
1147
1295
|
|
|
1148
1296
|
|
package/build/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare const Permission: typeof permission;
|
|
|
8
8
|
export declare const Role: typeof role;
|
|
9
9
|
export { configure } from './configure.js';
|
|
10
10
|
export { stubsRoot } from './stubs/main.js';
|
|
11
|
-
export {
|
|
11
|
+
export { AclManager, Acl } from './src/acl.js';
|
|
12
12
|
export { MorphMap, getClassPath } from './src/decorators.js';
|
|
13
13
|
export * as morphMapModel from './src/morph_map.js';
|
|
14
14
|
export { hasPermissions } from './src/mixins/has_permissions.js';
|
package/build/index.js
CHANGED
|
@@ -16,7 +16,7 @@ export const Permission = permission;
|
|
|
16
16
|
export const Role = role;
|
|
17
17
|
export { configure } from './configure.js';
|
|
18
18
|
export { stubsRoot } from './stubs/main.js';
|
|
19
|
-
export {
|
|
19
|
+
export { AclManager, Acl } from './src/acl.js';
|
|
20
20
|
export { MorphMap, getClassPath } from './src/decorators.js';
|
|
21
21
|
export * as morphMapModel from './src/morph_map.js';
|
|
22
22
|
export { hasPermissions } from './src/mixins/has_permissions.js';
|
|
@@ -18,6 +18,15 @@ export default class RolePermissionProvider {
|
|
|
18
18
|
this.app.container.singleton('modelManager', async () => {
|
|
19
19
|
return new ModelManager();
|
|
20
20
|
});
|
|
21
|
+
const wantsUuid = this.app.config.get('permissions.permissionsConfig.uuidSupport');
|
|
22
|
+
Permission.table = this.app.config.get('permissions.permissionsConfig.tables.permissions');
|
|
23
|
+
Permission.selfAssignPrimaryKey = wantsUuid;
|
|
24
|
+
Permission.uuidSupport = wantsUuid;
|
|
25
|
+
Role.table = this.app.config.get('permissions.permissionsConfig.tables.roles');
|
|
26
|
+
Role.selfAssignPrimaryKey = wantsUuid;
|
|
27
|
+
Role.uuidSupport = wantsUuid;
|
|
28
|
+
ModelRole.table = this.app.config.get('permissions.permissionsConfig.tables.modelRoles');
|
|
29
|
+
ModelPermission.table = this.app.config.get('permissions.permissionsConfig.tables.modelPermissions');
|
|
21
30
|
}
|
|
22
31
|
async boot() {
|
|
23
32
|
const modelManager = await this.app.container.make('modelManager');
|
|
@@ -26,7 +35,9 @@ export default class RolePermissionProvider {
|
|
|
26
35
|
modelManager.setModel('modelPermission', ModelPermission);
|
|
27
36
|
modelManager.setModel('modelRole', ModelRole);
|
|
28
37
|
modelManager.setModel('scope', Scope);
|
|
38
|
+
const emitter = await this.app.container.make('emitter');
|
|
29
39
|
AclManager.setModelManager(modelManager);
|
|
40
|
+
AclManager.setEmitter(emitter);
|
|
30
41
|
const map = await this.app.container.make('morphMap');
|
|
31
42
|
map.set('permissions', Permission);
|
|
32
43
|
map.set('roles', Role);
|
package/build/src/acl.d.ts
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
import { RoleHasModelPermissions } from './services/roles/role_has_model_permissions.js';
|
|
2
2
|
import { ModelHasRolePermissions } from './services/models/model_has_role_permissions.js';
|
|
3
|
-
import { AclModel, MorphInterface, OptionsInterface, PermissionInterface, RoleInterface
|
|
3
|
+
import { AclModel, MorphInterface, OptionsInterface, PermissionInterface, RoleInterface } from './types.js';
|
|
4
|
+
import PermissionHasModelRoles from './services/permissions/permission_has_model_roles.js';
|
|
4
5
|
import ModelManager from './model_manager.js';
|
|
5
6
|
import EmptyPermission from './services/permissions/empty_permission.js';
|
|
6
7
|
import EmptyRoles from './services/roles/empty_roles.js';
|
|
8
|
+
import { BaseEvent, Emitter } from '@adonisjs/core/events';
|
|
9
|
+
import { Scope } from './scope.js';
|
|
7
10
|
export declare class AclManager {
|
|
8
11
|
private static modelManager;
|
|
9
12
|
private static map;
|
|
13
|
+
private static emitter;
|
|
14
|
+
protected currentScope: Scope;
|
|
15
|
+
private readonly allowOptionsRewriting;
|
|
16
|
+
private options;
|
|
10
17
|
static setModelManager(manager: ModelManager): void;
|
|
18
|
+
static getModelManager(): ModelManager;
|
|
11
19
|
static setMorphMap(map: MorphInterface): void;
|
|
12
|
-
|
|
13
|
-
private options;
|
|
20
|
+
static setEmitter(emitter: Emitter<any>): void;
|
|
14
21
|
constructor(allowOptionsRewriting: boolean, defaultOptions?: OptionsInterface);
|
|
15
22
|
model(model: AclModel): ModelHasRolePermissions;
|
|
16
23
|
role(): EmptyRoles;
|
|
17
24
|
role(role: RoleInterface): RoleHasModelPermissions;
|
|
18
25
|
permission(): EmptyPermission;
|
|
19
|
-
permission(permission: PermissionInterface):
|
|
20
|
-
private createNewScope;
|
|
26
|
+
permission(permission: PermissionInterface): PermissionHasModelRoles;
|
|
21
27
|
/**
|
|
22
28
|
* changing global options
|
|
23
29
|
* @param options
|
|
@@ -28,7 +34,12 @@ export declare class AclManager {
|
|
|
28
34
|
* @param scope
|
|
29
35
|
* @param forceUpdate
|
|
30
36
|
*/
|
|
31
|
-
scope(scope:
|
|
37
|
+
scope(scope: Scope, forceUpdate?: boolean): this;
|
|
32
38
|
getScope(): any;
|
|
39
|
+
withoutEvents(): AclManager;
|
|
40
|
+
withoutEvents<T extends BaseEvent>(events: T[]): AclManager;
|
|
41
|
+
withEvents(): AclManager;
|
|
42
|
+
withEvents<T extends BaseEvent>(events: T[]): AclManager;
|
|
43
|
+
protected optionClone(): OptionsInterface;
|
|
33
44
|
}
|
|
34
45
|
export declare const Acl: AclManager;
|
package/build/src/acl.js
CHANGED
|
@@ -1,47 +1,55 @@
|
|
|
1
1
|
import { RoleHasModelPermissions } from './services/roles/role_has_model_permissions.js';
|
|
2
2
|
import { ModelHasRolePermissions } from './services/models/model_has_role_permissions.js';
|
|
3
3
|
import PermissionHasModelRoles from './services/permissions/permission_has_model_roles.js';
|
|
4
|
-
import ModelManager from './model_manager.js';
|
|
5
4
|
import EmptyPermission from './services/permissions/empty_permission.js';
|
|
6
5
|
import EmptyRoles from './services/roles/empty_roles.js';
|
|
7
6
|
import { Scope } from './scope.js';
|
|
8
7
|
export class AclManager {
|
|
9
8
|
static modelManager;
|
|
10
9
|
static map;
|
|
10
|
+
static emitter;
|
|
11
|
+
currentScope;
|
|
12
|
+
allowOptionsRewriting;
|
|
13
|
+
options = {
|
|
14
|
+
events: {
|
|
15
|
+
fire: true,
|
|
16
|
+
except: [],
|
|
17
|
+
only: [],
|
|
18
|
+
},
|
|
19
|
+
};
|
|
11
20
|
static setModelManager(manager) {
|
|
12
21
|
this.modelManager = manager;
|
|
13
22
|
}
|
|
23
|
+
static getModelManager() {
|
|
24
|
+
return this.modelManager;
|
|
25
|
+
}
|
|
14
26
|
static setMorphMap(map) {
|
|
15
27
|
this.map = map;
|
|
16
28
|
}
|
|
17
|
-
|
|
18
|
-
|
|
29
|
+
static setEmitter(emitter) {
|
|
30
|
+
this.emitter = emitter;
|
|
31
|
+
}
|
|
19
32
|
constructor(allowOptionsRewriting, defaultOptions) {
|
|
20
33
|
this.allowOptionsRewriting = allowOptionsRewriting;
|
|
21
|
-
// default global scope
|
|
22
|
-
this.options['scope'] = this.createNewScope();
|
|
23
34
|
if (defaultOptions) {
|
|
24
35
|
this.options = { ...this.options, ...defaultOptions };
|
|
25
36
|
}
|
|
37
|
+
this.currentScope = new Scope();
|
|
26
38
|
}
|
|
27
39
|
model(model) {
|
|
28
|
-
return new ModelHasRolePermissions(AclManager.modelManager, AclManager.map,
|
|
40
|
+
return new ModelHasRolePermissions(AclManager.modelManager, AclManager.map, this.optionClone(), new Scope().set(this.currentScope.get()), model, AclManager.emitter);
|
|
29
41
|
}
|
|
30
42
|
role(role) {
|
|
31
43
|
if (role) {
|
|
32
|
-
return new RoleHasModelPermissions(AclManager.modelManager, AclManager.map,
|
|
44
|
+
return new RoleHasModelPermissions(AclManager.modelManager, AclManager.map, this.optionClone(), new Scope().set(this.currentScope.get()), role, AclManager.emitter);
|
|
33
45
|
}
|
|
34
|
-
return new EmptyRoles(AclManager.modelManager, AclManager.map,
|
|
46
|
+
return new EmptyRoles(AclManager.modelManager, AclManager.map, this.optionClone(), new Scope().set(this.currentScope.get()), AclManager.emitter);
|
|
35
47
|
}
|
|
36
48
|
permission(permission) {
|
|
37
49
|
if (permission) {
|
|
38
|
-
return new PermissionHasModelRoles(AclManager.modelManager, AclManager.map,
|
|
50
|
+
return new PermissionHasModelRoles(AclManager.modelManager, AclManager.map, this.optionClone(), new Scope().set(this.currentScope.get()), permission, AclManager.emitter);
|
|
39
51
|
}
|
|
40
|
-
return new EmptyPermission(AclManager.modelManager, AclManager.map,
|
|
41
|
-
}
|
|
42
|
-
createNewScope() {
|
|
43
|
-
const ScopeClass = AclManager.modelManager.getModel('scope');
|
|
44
|
-
return new ScopeClass().get();
|
|
52
|
+
return new EmptyPermission(AclManager.modelManager, AclManager.map, this.optionClone(), new Scope().set(this.currentScope.get()), AclManager.emitter);
|
|
45
53
|
}
|
|
46
54
|
/**
|
|
47
55
|
* changing global options
|
|
@@ -63,16 +71,30 @@ export class AclManager {
|
|
|
63
71
|
if (!this.allowOptionsRewriting && !forceUpdate) {
|
|
64
72
|
throw new Error('Scope method call is not available on global Acl object, use AclManager to create new scoped object or use forceUpdate=true');
|
|
65
73
|
}
|
|
66
|
-
this.
|
|
67
|
-
scope: scope.get(),
|
|
68
|
-
}, forceUpdate);
|
|
74
|
+
this.currentScope = scope;
|
|
69
75
|
return this;
|
|
70
76
|
}
|
|
71
77
|
getScope() {
|
|
72
78
|
return this.options['scope'];
|
|
73
79
|
}
|
|
80
|
+
withoutEvents(events) {
|
|
81
|
+
if (events?.length) {
|
|
82
|
+
this.options.events.except = events;
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
this.options.events.fire = false;
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
withEvents(events) {
|
|
89
|
+
if (events?.length) {
|
|
90
|
+
this.options.events.only = events;
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
this.options.events.fire = true;
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
optionClone() {
|
|
97
|
+
return structuredClone(this.options);
|
|
98
|
+
}
|
|
74
99
|
}
|
|
75
|
-
const modelManager = new ModelManager();
|
|
76
|
-
modelManager.setModel('scope', Scope);
|
|
77
|
-
AclManager.setModelManager(modelManager);
|
|
78
100
|
export const Acl = new AclManager(false);
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { BaseEvent } from '@adonisjs/core/events';
|
|
2
|
+
import Permission from '../../models/permission.js';
|
|
3
|
+
import { ModelIdType } from '../../types.js';
|
|
4
|
+
import { LucidModel } from '@adonisjs/lucid/types/model';
|
|
5
|
+
export declare class PermissionCreatedEvent extends BaseEvent {
|
|
6
|
+
permission: Permission;
|
|
7
|
+
/**
|
|
8
|
+
* Accept event data as constructor parameters
|
|
9
|
+
*/
|
|
10
|
+
constructor(permission: Permission);
|
|
11
|
+
}
|
|
12
|
+
export declare class PermissionDeletedEvent extends BaseEvent {
|
|
13
|
+
permission: string;
|
|
14
|
+
/**
|
|
15
|
+
* Accept event data as constructor parameters
|
|
16
|
+
*/
|
|
17
|
+
constructor(permission: string);
|
|
18
|
+
}
|
|
19
|
+
export declare class PermissionsAttachedToRoleEvent extends BaseEvent {
|
|
20
|
+
permissionIds: ModelIdType[];
|
|
21
|
+
roleId: ModelIdType;
|
|
22
|
+
/**
|
|
23
|
+
* Accept event data as constructor parameters
|
|
24
|
+
*/
|
|
25
|
+
constructor(permissionIds: ModelIdType[], roleId: ModelIdType);
|
|
26
|
+
}
|
|
27
|
+
export declare class PermissionsDetachedFromRoleEvent extends BaseEvent {
|
|
28
|
+
permissions: string[];
|
|
29
|
+
roleId: ModelIdType;
|
|
30
|
+
/**
|
|
31
|
+
* Accept event data as constructor parameters
|
|
32
|
+
*/
|
|
33
|
+
constructor(permissions: string[], roleId: ModelIdType);
|
|
34
|
+
}
|
|
35
|
+
export declare class PermissionsAttachedToModelEvent<T extends LucidModel> extends BaseEvent {
|
|
36
|
+
permissionIds: ModelIdType[];
|
|
37
|
+
model: T;
|
|
38
|
+
/**
|
|
39
|
+
* Accept event data as constructor parameters
|
|
40
|
+
*/
|
|
41
|
+
constructor(permissionIds: ModelIdType[], model: T);
|
|
42
|
+
}
|
|
43
|
+
export declare class PermissionsDetachedFromModelEvent<T extends LucidModel> extends BaseEvent {
|
|
44
|
+
permissions: string[];
|
|
45
|
+
model: T;
|
|
46
|
+
/**
|
|
47
|
+
* Accept event data as constructor parameters
|
|
48
|
+
*/
|
|
49
|
+
constructor(permissions: string[], model: T);
|
|
50
|
+
}
|
|
51
|
+
export declare class PermissionsFlushedEvent<T extends LucidModel> extends BaseEvent {
|
|
52
|
+
model: T;
|
|
53
|
+
/**
|
|
54
|
+
* Accept event data as constructor parameters
|
|
55
|
+
*/
|
|
56
|
+
constructor(model: T);
|
|
57
|
+
}
|
|
58
|
+
export declare class PermissionsForbadeEvent<T extends LucidModel> extends BaseEvent {
|
|
59
|
+
permissionIds: ModelIdType[];
|
|
60
|
+
model: T;
|
|
61
|
+
/**
|
|
62
|
+
* Accept event data as constructor parameters
|
|
63
|
+
*/
|
|
64
|
+
constructor(permissionIds: ModelIdType[], model: T);
|
|
65
|
+
}
|
|
66
|
+
export declare class PermissionsUnForbadeEvent<T extends LucidModel> extends BaseEvent {
|
|
67
|
+
permissionIds: ModelIdType[];
|
|
68
|
+
model: T;
|
|
69
|
+
/**
|
|
70
|
+
* Accept event data as constructor parameters
|
|
71
|
+
*/
|
|
72
|
+
constructor(permissionIds: ModelIdType[], model: T);
|
|
73
|
+
}
|
|
74
|
+
export declare class PermissionsFlushedFromRoleEvent extends BaseEvent {
|
|
75
|
+
roleId: ModelIdType;
|
|
76
|
+
/**
|
|
77
|
+
* Accept event data as constructor parameters
|
|
78
|
+
*/
|
|
79
|
+
constructor(roleId: ModelIdType);
|
|
80
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { BaseEvent } from '@adonisjs/core/events';
|
|
2
|
+
export class PermissionCreatedEvent extends BaseEvent {
|
|
3
|
+
permission;
|
|
4
|
+
/**
|
|
5
|
+
* Accept event data as constructor parameters
|
|
6
|
+
*/
|
|
7
|
+
constructor(permission) {
|
|
8
|
+
super();
|
|
9
|
+
this.permission = permission;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class PermissionDeletedEvent extends BaseEvent {
|
|
13
|
+
permission;
|
|
14
|
+
/**
|
|
15
|
+
* Accept event data as constructor parameters
|
|
16
|
+
*/
|
|
17
|
+
constructor(permission) {
|
|
18
|
+
super();
|
|
19
|
+
this.permission = permission;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class PermissionsAttachedToRoleEvent extends BaseEvent {
|
|
23
|
+
permissionIds;
|
|
24
|
+
roleId;
|
|
25
|
+
/**
|
|
26
|
+
* Accept event data as constructor parameters
|
|
27
|
+
*/
|
|
28
|
+
constructor(permissionIds, roleId) {
|
|
29
|
+
super();
|
|
30
|
+
this.permissionIds = permissionIds;
|
|
31
|
+
this.roleId = roleId;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class PermissionsDetachedFromRoleEvent extends BaseEvent {
|
|
35
|
+
permissions;
|
|
36
|
+
roleId;
|
|
37
|
+
/**
|
|
38
|
+
* Accept event data as constructor parameters
|
|
39
|
+
*/
|
|
40
|
+
constructor(permissions, roleId) {
|
|
41
|
+
super();
|
|
42
|
+
this.permissions = permissions;
|
|
43
|
+
this.roleId = roleId;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export class PermissionsAttachedToModelEvent extends BaseEvent {
|
|
47
|
+
permissionIds;
|
|
48
|
+
model;
|
|
49
|
+
/**
|
|
50
|
+
* Accept event data as constructor parameters
|
|
51
|
+
*/
|
|
52
|
+
constructor(permissionIds, model) {
|
|
53
|
+
super();
|
|
54
|
+
this.permissionIds = permissionIds;
|
|
55
|
+
this.model = model;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export class PermissionsDetachedFromModelEvent extends BaseEvent {
|
|
59
|
+
permissions;
|
|
60
|
+
model;
|
|
61
|
+
/**
|
|
62
|
+
* Accept event data as constructor parameters
|
|
63
|
+
*/
|
|
64
|
+
constructor(permissions, model) {
|
|
65
|
+
super();
|
|
66
|
+
this.permissions = permissions;
|
|
67
|
+
this.model = model;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export class PermissionsFlushedEvent extends BaseEvent {
|
|
71
|
+
model;
|
|
72
|
+
/**
|
|
73
|
+
* Accept event data as constructor parameters
|
|
74
|
+
*/
|
|
75
|
+
constructor(model) {
|
|
76
|
+
super();
|
|
77
|
+
this.model = model;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export class PermissionsForbadeEvent extends BaseEvent {
|
|
81
|
+
permissionIds;
|
|
82
|
+
model;
|
|
83
|
+
/**
|
|
84
|
+
* Accept event data as constructor parameters
|
|
85
|
+
*/
|
|
86
|
+
constructor(permissionIds, model) {
|
|
87
|
+
super();
|
|
88
|
+
this.permissionIds = permissionIds;
|
|
89
|
+
this.model = model;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export class PermissionsUnForbadeEvent extends BaseEvent {
|
|
93
|
+
permissionIds;
|
|
94
|
+
model;
|
|
95
|
+
/**
|
|
96
|
+
* Accept event data as constructor parameters
|
|
97
|
+
*/
|
|
98
|
+
constructor(permissionIds, model) {
|
|
99
|
+
super();
|
|
100
|
+
this.permissionIds = permissionIds;
|
|
101
|
+
this.model = model;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export class PermissionsFlushedFromRoleEvent extends BaseEvent {
|
|
105
|
+
roleId;
|
|
106
|
+
/**
|
|
107
|
+
* Accept event data as constructor parameters
|
|
108
|
+
*/
|
|
109
|
+
constructor(roleId) {
|
|
110
|
+
super();
|
|
111
|
+
this.roleId = roleId;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { BaseEvent } from '@adonisjs/core/events';
|
|
2
|
+
import Role from '../../models/role.js';
|
|
3
|
+
import { LucidModel } from '@adonisjs/lucid/types/model';
|
|
4
|
+
export declare class RoleCreatedEvent extends BaseEvent {
|
|
5
|
+
role: Role;
|
|
6
|
+
/**
|
|
7
|
+
* Accept event data as constructor parameters
|
|
8
|
+
*/
|
|
9
|
+
constructor(role: Role);
|
|
10
|
+
}
|
|
11
|
+
export declare class RoleDeletedEvent extends BaseEvent {
|
|
12
|
+
role: string;
|
|
13
|
+
/**
|
|
14
|
+
* Accept event data as constructor parameters
|
|
15
|
+
*/
|
|
16
|
+
constructor(role: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class RolesAttachedToModel<T extends LucidModel> extends BaseEvent {
|
|
19
|
+
roles: string[];
|
|
20
|
+
model: T;
|
|
21
|
+
/**
|
|
22
|
+
* Accept event data as constructor parameters
|
|
23
|
+
*/
|
|
24
|
+
constructor(roles: string[], model: T);
|
|
25
|
+
}
|
|
26
|
+
export declare class RolesDetachedFromModelEvent<T extends LucidModel> extends BaseEvent {
|
|
27
|
+
roles: string[];
|
|
28
|
+
model: T;
|
|
29
|
+
/**
|
|
30
|
+
* Accept event data as constructor parameters
|
|
31
|
+
*/
|
|
32
|
+
constructor(roles: string[], model: T);
|
|
33
|
+
}
|
|
34
|
+
export declare class RolesFlushedFromModelEvent extends BaseEvent {
|
|
35
|
+
model: LucidModel;
|
|
36
|
+
/**
|
|
37
|
+
* Accept event data as constructor parameters
|
|
38
|
+
*/
|
|
39
|
+
constructor(model: LucidModel);
|
|
40
|
+
}
|