@holoyan/adonisjs-permissions 1.0.5 → 1.2.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.
Files changed (49) hide show
  1. package/README.md +143 -9
  2. package/build/index.d.ts +1 -2
  3. package/build/index.js +1 -2
  4. package/build/providers/role_permission_provider.d.ts +2 -2
  5. package/build/providers/role_permission_provider.js +15 -4
  6. package/build/src/acl.d.ts +17 -6
  7. package/build/src/acl.js +42 -20
  8. package/build/src/decorators.js +4 -12
  9. package/build/src/events/index.d.ts +2 -0
  10. package/build/src/events/index.js +2 -0
  11. package/build/src/events/permissions/permissions.d.ts +80 -0
  12. package/build/src/events/permissions/permissions.js +113 -0
  13. package/build/src/events/roles/roles.d.ts +40 -0
  14. package/build/src/events/roles/roles.js +55 -0
  15. package/build/src/mixins/has_permissions.d.ts +19 -15
  16. package/build/src/models/model_permission.d.ts +0 -1
  17. package/build/src/models/model_permission.js +0 -4
  18. package/build/src/models/model_role.d.ts +0 -1
  19. package/build/src/models/model_role.js +0 -4
  20. package/build/src/models/permission.d.ts +3 -4
  21. package/build/src/models/permission.js +9 -10
  22. package/build/src/models/role.d.ts +3 -4
  23. package/build/src/models/role.js +9 -10
  24. package/build/src/services/base_adapter.d.ts +10 -3
  25. package/build/src/services/base_adapter.js +30 -6
  26. package/build/src/services/base_service.d.ts +7 -3
  27. package/build/src/services/base_service.js +8 -4
  28. package/build/src/services/models/model_has_role_permissions.d.ts +117 -25
  29. package/build/src/services/models/model_has_role_permissions.js +152 -33
  30. package/build/src/services/models/model_service.d.ts +3 -1
  31. package/build/src/services/models/model_service.js +4 -2
  32. package/build/src/services/permissions/empty_permission.d.ts +10 -8
  33. package/build/src/services/permissions/empty_permission.js +26 -10
  34. package/build/src/services/permissions/permission_has_model_roles.d.ts +23 -16
  35. package/build/src/services/permissions/permission_has_model_roles.js +47 -30
  36. package/build/src/services/permissions/permissions_service.d.ts +25 -23
  37. package/build/src/services/permissions/permissions_service.js +12 -11
  38. package/build/src/services/roles/empty_roles.d.ts +11 -8
  39. package/build/src/services/roles/empty_roles.js +27 -8
  40. package/build/src/services/roles/role_has_model_permissions.d.ts +65 -20
  41. package/build/src/services/roles/role_has_model_permissions.js +77 -18
  42. package/build/src/services/roles/roles_service.d.ts +8 -4
  43. package/build/src/services/roles/roles_service.js +15 -16
  44. package/build/src/types.d.ts +18 -7
  45. package/build/stubs/middlewares/acl_middleware.stub +1 -0
  46. package/build/stubs/migrations/create_db.stub +71 -56
  47. package/package.json +10 -6
  48. package/build/src/morph_map.d.ts +0 -11
  49. package/build/src/morph_map.js +0 -40
package/README.md CHANGED
@@ -12,6 +12,11 @@ Checkout other AdonisJS packages
12
12
  - It's simple, just star this repository, that is enough to keep me motivated to maintain this package.
13
13
 
14
14
 
15
+ ## Release Notes
16
+
17
+ Version: >= v1.2.0
18
+ * 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)
19
+
15
20
  ## Table of Contents
16
21
 
17
22
  <details><summary>Click to expand</summary><p>
@@ -49,6 +54,7 @@ Checkout other AdonisJS packages
49
54
  - [The Scope middleware](#the-scope-middleware)
50
55
  - [Default Scope](#default-scope-tenant)
51
56
  - [Transactions](#transactions)
57
+ - [Events](#events)
52
58
  - [Cheat sheet](#cheat-sheet)
53
59
  - [Todo](#todo)
54
60
  - [Test](#test)
@@ -104,7 +110,7 @@ Example.
104
110
  ```typescript
105
111
 
106
112
  import { BaseModel, column } from '@adonisjs/lucid/orm'
107
- import { MorphMap } from '@holoyan/adonisjs-permissions'
113
+ import { MorphMap } from '@holoyan/morph-map-js' // (NOTE upper case `MorphMap`)
108
114
  import { AclModelInterface } from '@holoyan/adonisjs-permissions/types'
109
115
 
110
116
  @MorphMap('users')
@@ -135,11 +141,6 @@ export default class Post extends BaseModel implements AclModelInterface {
135
141
 
136
142
  ```
137
143
 
138
- ## Release Notes
139
-
140
- Version: >= v1.0.3
141
- * Added `sync` method
142
-
143
144
  ## Mixins
144
145
 
145
146
  If you want to be able to call `Acl` methods on a `User` model then consider using `hasPermissions` mixin
@@ -147,7 +148,7 @@ If you want to be able to call `Acl` methods on a `User` model then consider usi
147
148
  ```typescript
148
149
 
149
150
  import { BaseModel, column } from '@adonisjs/lucid/orm'
150
- import { MorphMap } from '@holoyan/adonisjs-permissions'
151
+ import { MorphMap } from '@holoyan/morph-map-js' // (NOTE upper case `MorphMap`)
151
152
  import { AclModelInterface } from '@holoyan/adonisjs-permissions/types'
152
153
 
153
154
  // import mixin
@@ -992,6 +993,139 @@ await trx.commit()
992
993
  ```
993
994
 
994
995
 
996
+ ### Events
997
+
998
+ `Acl` has built-in events that you can listen to. All they are class-based. To listen to the events, you can use `emitter`
999
+
1000
+ ```typescript
1001
+ import emitter from '@adonisjs/core/services/emitter'
1002
+ import { PermissionsAttachedToModelEvent } from '@holoyan/adonisjs-permissions/events'
1003
+
1004
+ emitter.on(PermissionsAttachedToModelEvent, (event) => {
1005
+ console.log('permission attached to the model')
1006
+ console.log(event.model) // lucid model instance
1007
+ console.log(event.permissionIds) // array of permission ids
1008
+ })
1009
+
1010
+ await Acl.model(myUser).allow('create')
1011
+
1012
+ ```
1013
+
1014
+
1015
+ You can also disable events per query by calling withoutEvents() method
1016
+
1017
+ ```typescript
1018
+
1019
+ emitter.on(RoleCreatedEvent, () => {
1020
+ console.log('Role created') // this will not be called
1021
+ })
1022
+
1023
+ //
1024
+ await Acl.role().withoutEvents().create({ // this one will not trigger RoleCreatedEvent
1025
+ slug: 'admin',
1026
+ })
1027
+
1028
+ await Acl.role().create({ // this will trigger
1029
+ slug: 'admin',
1030
+ })
1031
+
1032
+ ```
1033
+
1034
+ If you want to completely disable events, you can do that by calling `withoutEvents()` method on the `Acl` class
1035
+
1036
+ ```typescript
1037
+
1038
+ Acl.withoutEvents()
1039
+
1040
+ // any method called on the Acl will not trigger any events
1041
+ emitter.on(RoleCreatedEvent, () => {
1042
+ console.log('Role created') // this will not be called
1043
+ })
1044
+
1045
+ await Acl.role().create({ // this will not trigger because globaly withoutEvents() is set
1046
+ slug: 'admin',
1047
+ })
1048
+ ```
1049
+
1050
+ List of events you can listen to:
1051
+
1052
+ ```
1053
+
1054
+ // Permission events
1055
+
1056
+ PermissionCreatedEvent { // only if you use Acl.permission().create() method
1057
+ permission: Permission // created permission instance
1058
+ }
1059
+
1060
+ PermissionDeletedEvent {
1061
+ permission: string // slug of deleted permission
1062
+ }
1063
+
1064
+ PermissionsAttachedToRoleEvent {
1065
+ permissionIds: ModelIdType[],
1066
+ roleId: ModelIdType
1067
+ }
1068
+
1069
+ PermissionsDetachedFromRoleEvent {
1070
+ permissions: string[],
1071
+ roleId: ModelIdType
1072
+ }
1073
+
1074
+ PermissionsAttachedToModelEvent<T extends LucidModel>{
1075
+ permissionIds: ModelIdType[],
1076
+ model: T
1077
+ }
1078
+
1079
+ PermissionsDetachedFromModelEvent<T extends LucidModel>{
1080
+ permissions: string[],
1081
+ model: T
1082
+ }
1083
+
1084
+ PermissionsFlushedEvent<T extends LucidModel> {
1085
+ model: T
1086
+ }
1087
+
1088
+ PermissionsForbadeEvent<T extends LucidModel> {
1089
+ permissionIds: ModelIdType[],
1090
+ model: T
1091
+ }
1092
+
1093
+ PermissionsUnForbadeEvent<T extends LucidModel> {
1094
+ permissionIds: ModelIdType[],
1095
+ model: T
1096
+ }
1097
+
1098
+ PermissionsFlushedFromRoleEvent{
1099
+ roleId: ModelIdType
1100
+ }
1101
+
1102
+ // Role events
1103
+
1104
+ RoleCreatedEvent {
1105
+ role: Role // created role instance
1106
+ }
1107
+
1108
+ RoleDeletedEvent {
1109
+ role: string // slug of deleted role
1110
+ }
1111
+
1112
+ RolesAttachedToModel<T extends LucidModel> {
1113
+ roles: string[], // array of role slugs
1114
+ model: T // lucid model instance
1115
+ }
1116
+
1117
+ RolesDetachedFromModelEvent<T extends LucidModel> {
1118
+ roles: string[], // array of role slugs
1119
+ model: T // lucid model instance
1120
+ }
1121
+
1122
+ RolesFlushedFromModelEvent {
1123
+ model: T // lucid model instance
1124
+ }
1125
+
1126
+ ```
1127
+
1128
+
995
1129
  ## Cheat sheet
996
1130
 
997
1131
  Model methods
@@ -1138,7 +1272,7 @@ await Acl.permission(myPermission).detachFromRole(role_slug)
1138
1272
 
1139
1273
  - [X] Scopes (Multitenancy)
1140
1274
  - [X] UUID support
1141
- - [ ] Events
1275
+ - [X] Events
1142
1276
  - [ ] More test coverage
1143
1277
  - [ ] Caching
1144
1278
  - [ ] Integration with AdonisJs Bouncer
@@ -1153,7 +1287,7 @@ await Acl.permission(myPermission).detachFromRole(role_slug)
1153
1287
 
1154
1288
  | AdonisJS Lucid version | Package version |
1155
1289
  |------------------------|-----------------|
1156
- | v20.x | 0.8.x |
1290
+ | v20.x | 0.10.x |
1157
1291
  | v21.x | 1.x |
1158
1292
 
1159
1293
 
package/build/index.d.ts CHANGED
@@ -8,8 +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 { Acl, AclManager } from './src/acl.js';
11
+ export { AclManager, Acl } from './src/acl.js';
12
12
  export { MorphMap, getClassPath } from './src/decorators.js';
13
- export * as morphMapModel from './src/morph_map.js';
14
13
  export { hasPermissions } from './src/mixins/has_permissions.js';
15
14
  export { Scope } from './src/scope.js';
package/build/index.js CHANGED
@@ -16,8 +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 { Acl, AclManager } from './src/acl.js';
19
+ export { AclManager, Acl } from './src/acl.js';
20
20
  export { MorphMap, getClassPath } from './src/decorators.js';
21
- export * as morphMapModel from './src/morph_map.js';
22
21
  export { hasPermissions } from './src/mixins/has_permissions.js';
23
22
  export { Scope } from './src/scope.js';
@@ -1,9 +1,9 @@
1
1
  import { ApplicationService } from '@adonisjs/core/types';
2
2
  import ModelManager from '../src/model_manager.js';
3
- import MorphMap from '../src/morph_map.js';
3
+ import { MorphMapManager } from '@holoyan/morph-map-js';
4
4
  declare module '@adonisjs/core/types' {
5
5
  interface ContainerBindings {
6
- morphMap: MorphMap;
6
+ morphMap: MorphMapManager;
7
7
  modelManager: ModelManager;
8
8
  }
9
9
  }
@@ -4,8 +4,8 @@ import ModelPermission from '../src/models/model_permission.js';
4
4
  import ModelRole from '../src/models/model_role.js';
5
5
  import ModelManager from '../src/model_manager.js';
6
6
  import { AclManager } from '../src/acl.js';
7
- import MorphMap from '../src/morph_map.js';
8
7
  import { Scope } from '../src/scope.js';
8
+ import { morphMap } from '@holoyan/morph-map-js';
9
9
  export default class RolePermissionProvider {
10
10
  app;
11
11
  constructor(app) {
@@ -13,11 +13,20 @@ export default class RolePermissionProvider {
13
13
  }
14
14
  register() {
15
15
  this.app.container.singleton('morphMap', async () => {
16
- return new MorphMap();
16
+ return morphMap;
17
17
  });
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,10 +35,12 @@ 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
- map.set('permissions', Permission);
32
- map.set('roles', Role);
42
+ // map.set('permissions', Permission)
43
+ // map.set('roles', Role)
33
44
  AclManager.setMorphMap(map);
34
45
  }
35
46
  }
@@ -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, ScopeInterface } from './types.js';
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
- private allowOptionsRewriting;
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): EmptyPermission;
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: ScopeInterface, forceUpdate?: boolean): this;
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
- allowOptionsRewriting;
18
- options = {};
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, { ...this.options }, model);
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, { ...this.options }, role);
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, { ...this.options });
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, { ...this.options }, permission);
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, { ...this.options });
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.withOptions({
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);
@@ -1,19 +1,11 @@
1
- import app from '@adonisjs/core/services/app';
1
+ import { morphMap, getClassPath as baseGetClassPath } from '@holoyan/morph-map-js';
2
+ // keep for backward compatibility
2
3
  export function MorphMap(param) {
3
4
  return function (target) {
4
- const service = async function () {
5
- var result = await app.container.make('morphMap');
6
- result.set(param, target);
7
- return param;
8
- };
9
- target.prototype.__morphMapName = service();
5
+ morphMap.set(param, target);
10
6
  target.prototype.__morphMapName = param;
11
7
  };
12
8
  }
13
9
  export function getClassPath(clazz) {
14
- const morphMapName = clazz.prototype.__morphMapName;
15
- if (!morphMapName) {
16
- throw new Error('morph map name not specified');
17
- }
18
- return morphMapName;
10
+ return baseGetClassPath(clazz);
19
11
  }
@@ -0,0 +1,2 @@
1
+ export * from './roles/roles.js';
2
+ export * from './permissions/permissions.js';
@@ -0,0 +1,2 @@
1
+ export * from './roles/roles.js';
2
+ export * from './permissions/permissions.js';
@@ -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
+ }