@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.
Files changed (45) hide show
  1. package/README.md +155 -7
  2. package/build/index.d.ts +1 -1
  3. package/build/index.js +1 -1
  4. package/build/providers/role_permission_provider.js +11 -0
  5. package/build/src/acl.d.ts +17 -6
  6. package/build/src/acl.js +42 -20
  7. package/build/src/events/index.d.ts +2 -0
  8. package/build/src/events/index.js +2 -0
  9. package/build/src/events/permissions/permissions.d.ts +80 -0
  10. package/build/src/events/permissions/permissions.js +113 -0
  11. package/build/src/events/roles/roles.d.ts +40 -0
  12. package/build/src/events/roles/roles.js +55 -0
  13. package/build/src/mixins/has_permissions.d.ts +15 -18
  14. package/build/src/models/model_permission.d.ts +0 -1
  15. package/build/src/models/model_permission.js +0 -4
  16. package/build/src/models/model_role.d.ts +0 -1
  17. package/build/src/models/model_role.js +0 -4
  18. package/build/src/models/permission.d.ts +3 -4
  19. package/build/src/models/permission.js +2 -8
  20. package/build/src/models/role.d.ts +3 -4
  21. package/build/src/models/role.js +2 -8
  22. package/build/src/services/base_adapter.d.ts +10 -3
  23. package/build/src/services/base_adapter.js +30 -6
  24. package/build/src/services/base_service.d.ts +7 -3
  25. package/build/src/services/base_service.js +8 -4
  26. package/build/src/services/models/model_has_role_permissions.d.ts +117 -25
  27. package/build/src/services/models/model_has_role_permissions.js +152 -33
  28. package/build/src/services/models/model_service.d.ts +3 -1
  29. package/build/src/services/models/model_service.js +4 -2
  30. package/build/src/services/permissions/empty_permission.d.ts +10 -8
  31. package/build/src/services/permissions/empty_permission.js +26 -10
  32. package/build/src/services/permissions/permission_has_model_roles.d.ts +23 -16
  33. package/build/src/services/permissions/permission_has_model_roles.js +47 -30
  34. package/build/src/services/permissions/permissions_service.d.ts +25 -23
  35. package/build/src/services/permissions/permissions_service.js +12 -11
  36. package/build/src/services/roles/empty_roles.d.ts +11 -8
  37. package/build/src/services/roles/empty_roles.js +27 -8
  38. package/build/src/services/roles/role_has_model_permissions.d.ts +65 -20
  39. package/build/src/services/roles/role_has_model_permissions.js +77 -18
  40. package/build/src/services/roles/roles_service.d.ts +8 -4
  41. package/build/src/services/roles/roles_service.js +15 -16
  42. package/build/src/types.d.ts +18 -7
  43. package/build/stubs/middlewares/acl_middleware.stub +1 -0
  44. package/build/stubs/migrations/create_db.stub +71 -56
  45. 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
  [//]: # ([![test](https://github.com/holoyan/adonisjs-permissions/actions/workflows/test.yml/badge.svg)](https://github.com/holoyan/adonisjs-permissions/actions/workflows/test.yml))
4
8
  [![license](https://poser.pugx.org/silber/bouncer/license.svg)](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.8.21
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
- - [ ] Events
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 { Acl, AclManager } from './src/acl.js';
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 { Acl, AclManager } from './src/acl.js';
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);
@@ -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);
@@ -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
+ }
@@ -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
+ }