@holoyan/adonisjs-permissions 1.2.0 → 1.3.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 CHANGED
@@ -14,8 +14,8 @@ Checkout other AdonisJS packages
14
14
 
15
15
  ## Release Notes
16
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)
17
+ Version: >= v1.3.0
18
+ * Added [query helpers](#permissionqueryhelpers-mixin) mixin. To make it easier to query users(models) based on their roles and permissions
19
19
 
20
20
  ## Table of Contents
21
21
 
@@ -25,6 +25,8 @@ Version: >= v1.2.0
25
25
  - [Installation](#installation)
26
26
  - [Configuration](#configuration)
27
27
  - [Mixins](#mixins)
28
+ - [hasPermissions](#haspermissions-mixin)
29
+ - [permissionQueryHelpers](#permissionqueryhelpers-mixin)
28
30
  - [Support](#support)
29
31
  - [Database support](#database-support)
30
32
  - [UUID support](#uuid-support)
@@ -143,6 +145,8 @@ export default class Post extends BaseModel implements AclModelInterface {
143
145
 
144
146
  ## Mixins
145
147
 
148
+ ### hasPermissions mixin
149
+
146
150
  If you want to be able to call `Acl` methods on a `User` model then consider using `hasPermissions` mixin
147
151
 
148
152
  ```typescript
@@ -172,6 +176,61 @@ await user.allow('edit') // give edit permission
172
176
 
173
177
  ```
174
178
 
179
+
180
+ ### permissionQueryHelpers mixin
181
+
182
+ Sometimes you might want to get all users who have a specific permission, for that you can use `permissionQueryHelpers` mixin
183
+
184
+ ```typescript
185
+
186
+ import { permissionQueryHelpers } from '@holoyan/adonisjs-permissions'
187
+
188
+
189
+ @MorphMap('users')
190
+ export default class User extends compose(BaseModel, permissionQueryHelpers()) implements AclModelInterface {
191
+ getModelId(): number {
192
+ return this.id
193
+ }
194
+ // other code goes here
195
+
196
+ // name your scopes whatever you want, make sure to call query helper methods inside the scope
197
+ static whereRoles = scope((query, ...roles: string[]) => {
198
+ // all users who have roles
199
+ new User()._whereRoles(query, User, ...roles)
200
+ })
201
+
202
+ static whereDirectPermissions = scope(
203
+ (query, permissions: string[], target?: AclModel | Function) => {
204
+ // all users who have direct assigned permissions
205
+ new User()._whereDirectPermissions(query, User, permissions, target)
206
+ }
207
+ )
208
+
209
+ static whereRolePermissions = scope(
210
+ (query, permissions: string[], target?: AclModel | Function) => {
211
+ // all users who have permissions assigned through the role
212
+ new User()._whereRolePermissions(query, User, permissions, target)
213
+ }
214
+ )
215
+
216
+ static wherePermissions = scope((query, permissions: string[], target?: AclModel | Function) => {
217
+ // all users who have permissions assigned directly or through the role
218
+ new User()._wherePermissions(query, User, permissions, target)
219
+ })
220
+ }
221
+
222
+ ```
223
+
224
+ And to get all users who have `edit` permission, you can do that like this
225
+
226
+ ```typescript
227
+
228
+ const users = await User.query().withScopes((scopes) => {
229
+ scopes.wherePermissions(['edit'])
230
+ })
231
+
232
+ ```
233
+
175
234
  ## Support
176
235
 
177
236
  ### Database Support
@@ -1273,6 +1332,7 @@ await Acl.permission(myPermission).detachFromRole(role_slug)
1273
1332
  - [X] Scopes (Multitenancy)
1274
1333
  - [X] UUID support
1275
1334
  - [X] Events
1335
+ - [X] Query helpers
1276
1336
  - [ ] More test coverage
1277
1337
  - [ ] Caching
1278
1338
  - [ ] Integration with AdonisJs Bouncer
package/build/index.d.ts CHANGED
@@ -10,5 +10,5 @@ export { configure } from './configure.js';
10
10
  export { stubsRoot } from './stubs/main.js';
11
11
  export { AclManager, Acl } from './src/acl.js';
12
12
  export { MorphMap, getClassPath } from './src/decorators.js';
13
- export { hasPermissions } from './src/mixins/has_permissions.js';
13
+ export { hasPermissions, permissionQueryHelpers } from './src/mixins/has_permissions.js';
14
14
  export { Scope } from './src/scope.js';
package/build/index.js CHANGED
@@ -18,5 +18,5 @@ export { configure } from './configure.js';
18
18
  export { stubsRoot } from './stubs/main.js';
19
19
  export { AclManager, Acl } from './src/acl.js';
20
20
  export { MorphMap, getClassPath } from './src/decorators.js';
21
- export { hasPermissions } from './src/mixins/has_permissions.js';
21
+ export { hasPermissions, permissionQueryHelpers } from './src/mixins/has_permissions.js';
22
22
  export { Scope } from './src/scope.js';
@@ -1,13 +1,18 @@
1
1
  import type { NormalizeConstructor } from '@adonisjs/core/types/helpers';
2
2
  import { BaseModel } from '@adonisjs/lucid/orm';
3
3
  import { AclModel, ModelIdType } from '../types.js';
4
+ import type { ManyToMany, HasMany } from '@adonisjs/lucid/types/relations';
5
+ import Role from '../models/role.js';
6
+ import { LucidModel, LucidRow, ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
7
+ import { ModelRole, Permission } from '../../index.js';
8
+ import ModelPermission from '../models/model_permission.js';
4
9
  export declare function hasPermissions(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => {
5
10
  new (...args: any[]): {
6
11
  getModelId(): ModelIdType;
7
12
  /**
8
13
  * returns list of roles assigned to the model
9
14
  */
10
- roles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<typeof import("../models/role.js").default, import("../models/role.js").default>;
15
+ roles(): ModelQueryBuilderContract<typeof Role, Role>;
11
16
  /**
12
17
  * Check if model has role
13
18
  * @param role
@@ -142,13 +147,13 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
142
147
  * @param permission
143
148
  * @param target
144
149
  */
145
- assignDirectPermission(permission: string, target?: AclModel | Function): Promise<import("../models/model_permission.js").default[]>;
150
+ assignDirectPermission(permission: string, target?: AclModel | Function): Promise<ModelPermission[]>;
146
151
  /**
147
152
  * Allow permission for model
148
153
  * @param permission
149
154
  * @param target
150
155
  */
151
- allow(permission: string, target?: AclModel | Function): Promise<import("../models/model_permission.js").default[]>;
156
+ allow(permission: string, target?: AclModel | Function): Promise<ModelPermission[]>;
152
157
  /**
153
158
  * Revoke permission from model
154
159
  * @param permission
@@ -185,7 +190,7 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
185
190
  * @param permissions
186
191
  * @param target
187
192
  */
188
- syncPermissions(permissions: string[], target?: AclModel | Function): Promise<import("../models/model_permission.js").default[]>;
193
+ syncPermissions(permissions: string[], target?: AclModel | Function): Promise<ModelPermission[]>;
189
194
  /**
190
195
  * Forbid permission for model
191
196
  * @param permission
@@ -214,7 +219,7 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
214
219
  $extras: import("@adonisjs/lucid/types/model").ModelObject;
215
220
  $original: import("@adonisjs/lucid/types/model").ModelObject;
216
221
  $preloaded: {
217
- [relation: string]: import("@adonisjs/lucid/types/model").LucidRow | import("@adonisjs/lucid/types/model").LucidRow[];
222
+ [relation: string]: LucidRow | LucidRow[];
218
223
  };
219
224
  $columns: undefined;
220
225
  $sideloaded: import("@adonisjs/lucid/types/model").ModelObject;
@@ -231,14 +236,14 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
231
236
  useTransaction(trx: import("@adonisjs/lucid/types/database").TransactionClientContract): /*elided*/ any;
232
237
  useConnection(connection: string): /*elided*/ any;
233
238
  $getQueryFor(action: "insert", client: import("@adonisjs/lucid/types/database").QueryClientContract): ReturnType<import("@adonisjs/lucid/types/database").QueryClientContract["insertQuery"]>;
234
- $getQueryFor(action: "update" | "delete" | "refresh", client: import("@adonisjs/lucid/types/database").QueryClientContract): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel>;
239
+ $getQueryFor(action: "update" | "delete" | "refresh", client: import("@adonisjs/lucid/types/database").QueryClientContract): ModelQueryBuilderContract<LucidModel>;
235
240
  $setAttribute(key: string, value: any): void;
236
241
  $getAttribute(key: string): any;
237
242
  $getAttributeFromCache(key: string, callback: import("@adonisjs/lucid/types/model").CacheNode["getter"]): any;
238
243
  $hasRelated(key: string): boolean;
239
- $setRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | null): void;
240
- $pushRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | null): void;
241
- $getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | undefined | null;
244
+ $setRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<LucidRow> | null): void;
245
+ $pushRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<LucidRow> | null): void;
246
+ $getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<LucidRow> | undefined | null;
242
247
  $consumeAdapterResult(adapterResult: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject): void;
243
248
  $hydrateOriginals(): void;
244
249
  fill(value: Partial<{}>, allowExtraProperties?: boolean): /*elided*/ any;
@@ -254,22 +259,22 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
254
259
  load: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
255
260
  loadOnce: import("@adonisjs/lucid/types/model").LucidRowPreloadOnce</*elided*/ any>;
256
261
  preload: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
257
- loadAggregate: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = Self[Name] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? Self[Name]["subQuery"] : never>(name: Name, callback: (builder: RelatedBuilder) => void) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
258
- loadCount: <Self extends /*elided*/ any, Name_1 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder_1 = Self[Name_1] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? Self[Name_1]["subQuery"] : never>(name: Name_1, callback?: ((builder: RelatedBuilder_1) => void) | undefined) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
262
+ loadAggregate: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = Self[Name] extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? Self[Name]["subQuery"] : never>(name: Name, callback: (builder: RelatedBuilder) => void) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
263
+ loadCount: <Self extends /*elided*/ any, Name_1 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder_1 = Self[Name_1] extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? Self[Name_1]["subQuery"] : never>(name: Name_1, callback?: ((builder: RelatedBuilder_1) => void) | undefined) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
259
264
  serializeAttributes(fields?: import("@adonisjs/lucid/types/model").CherryPickFields, raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
260
265
  serializeComputed(fields?: import("@adonisjs/lucid/types/model").CherryPickFields): import("@adonisjs/lucid/types/model").ModelObject;
261
266
  serializeRelations(fields: undefined, raw: true): {
262
- [key: string]: import("@adonisjs/lucid/types/model").LucidRow | import("@adonisjs/lucid/types/model").LucidRow[];
267
+ [key: string]: LucidRow | LucidRow[];
263
268
  };
264
269
  serializeRelations(cherryPick: import("@adonisjs/lucid/types/model").CherryPick["relations"] | undefined, raw: false | undefined): import("@adonisjs/lucid/types/model").ModelObject;
265
270
  serializeRelations(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick["relations"], raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
266
271
  serialize(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick): import("@adonisjs/lucid/types/model").ModelObject;
267
272
  toObject(): import("@adonisjs/lucid/types/model").ModelObject;
268
273
  toJSON(): import("@adonisjs/lucid/types/model").ModelObject;
269
- related<Name_2 extends undefined>(relation: Name_2): /*elided*/ any[Name_2] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? /*elided*/ any[Name_2]["client"] : never;
274
+ related<Name_2 extends undefined>(relation: Name_2): /*elided*/ any[Name_2] extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? /*elided*/ any[Name_2]["client"] : never;
270
275
  };
271
- find: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
272
- all: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
276
+ find: <T extends LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
277
+ all: <T extends LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
273
278
  namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract;
274
279
  connection?: string | undefined;
275
280
  readonly booted: boolean;
@@ -290,59 +295,204 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
290
295
  serializedToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
291
296
  serializedToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
292
297
  };
293
- $createFromAdapterResult: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, result?: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => null | InstanceType<T>;
294
- $createMultipleFromAdapterResult: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, results: import("@adonisjs/lucid/types/model").ModelObject[], sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => InstanceType<T>[];
298
+ $createFromAdapterResult: <T extends LucidModel>(this: T, result?: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => null | InstanceType<T>;
299
+ $createMultipleFromAdapterResult: <T extends LucidModel>(this: T, results: import("@adonisjs/lucid/types/model").ModelObject[], sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => InstanceType<T>[];
295
300
  $addColumn: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ColumnOptions>) => import("@adonisjs/lucid/types/model").ColumnOptions;
296
301
  $hasColumn: (name: string) => boolean;
297
302
  $getColumn: (name: string) => import("@adonisjs/lucid/types/model").ModelColumnOptions | undefined;
298
303
  $addComputed: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ComputedOptions>) => import("@adonisjs/lucid/types/model").ComputedOptions;
299
304
  $hasComputed: (name: string) => boolean;
300
305
  $getComputed: (name: string) => import("@adonisjs/lucid/types/model").ComputedOptions | undefined;
301
- $addRelation: (name: string, type: import("@adonisjs/lucid/types/relations").ModelRelationTypes["__opaque_type"], relatedModel: () => import("@adonisjs/lucid/types/model").LucidModel, options: import("@adonisjs/lucid/types/model").ModelRelationOptions) => void;
306
+ $addRelation: (name: string, type: import("@adonisjs/lucid/types/relations").ModelRelationTypes["__opaque_type"], relatedModel: () => LucidModel, options: import("@adonisjs/lucid/types/model").ModelRelationOptions) => void;
302
307
  $hasRelation: (name: string) => boolean;
303
308
  $getRelation: {
304
- <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Name_2 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<InstanceType<Model_1>>>(this: Model_1, name: Name_2): InstanceType<Model_1>[Name_2] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? InstanceType<Model_1>[Name_2]["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract;
305
- <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_1, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
309
+ <Model_1 extends LucidModel, Name_2 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<InstanceType<Model_1>>>(this: Model_1, name: Name_2): InstanceType<Model_1>[Name_2] extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? InstanceType<Model_1>[Name_2]["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract;
310
+ <Model_1 extends LucidModel>(this: Model_1, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
306
311
  };
307
- $defineProperty: <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Prop extends keyof Model_1>(this: Model_1, propertyName: Prop, defaultValue: Model_1[Prop], strategy: "inherit" | "define" | ((value: Model_1[Prop]) => Model_1[Prop])) => void;
312
+ $defineProperty: <Model_1 extends LucidModel, Prop extends keyof Model_1>(this: Model_1, propertyName: Prop, defaultValue: Model_1[Prop], strategy: "inherit" | "define" | ((value: Model_1[Prop]) => Model_1[Prop])) => void;
308
313
  boot: () => void;
309
314
  before: {
310
- <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Event extends "find" | "fetch">(this: Model_1, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_1>, Event>): void;
311
- <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<[import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_1>, import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_1>], "paginate">): void;
312
- <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Event_1 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event_1, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event_1>): void;
315
+ <Model_1 extends LucidModel, Event extends "find" | "fetch">(this: Model_1, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<ModelQueryBuilderContract<Model_1>, Event>): void;
316
+ <Model_1 extends LucidModel>(this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<[ModelQueryBuilderContract<Model_1>, ModelQueryBuilderContract<Model_1>], "paginate">): void;
317
+ <Model_1 extends LucidModel, Event_1 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event_1, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event_1>): void;
313
318
  };
314
319
  after: {
315
- <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_1, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>[], "fetch">): void;
316
- <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelPaginatorContract<InstanceType<Model_1>>, "paginate">): void;
317
- <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Event_2 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event_2, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event_2>): void;
320
+ <Model_1 extends LucidModel>(this: Model_1, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>[], "fetch">): void;
321
+ <Model_1 extends LucidModel>(this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelPaginatorContract<InstanceType<Model_1>>, "paginate">): void;
322
+ <Model_1 extends LucidModel, Event_2 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event_2, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event_2>): void;
318
323
  };
319
- create: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
320
- createQuietly: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
321
- createMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
322
- createManyQuietly: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
323
- findOrFail: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
324
+ create: <T extends LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
325
+ createQuietly: <T extends LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
326
+ createMany: <T extends LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
327
+ createManyQuietly: <T extends LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
328
+ findOrFail: <T extends LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
324
329
  findBy: {
325
- <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T>>;
326
- <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T>>;
330
+ <T extends LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T>>;
331
+ <T extends LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T>>;
327
332
  };
328
333
  findByOrFail: {
329
- <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
330
- <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
334
+ <T extends LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
335
+ <T extends LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
331
336
  };
332
337
  findManyBy: {
333
- <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
334
- <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
338
+ <T extends LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
339
+ <T extends LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
335
340
  };
336
- first: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
337
- firstOrFail: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
338
- findMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
339
- firstOrNew: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
340
- firstOrCreate: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
341
- updateOrCreate: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, updatePayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
342
- fetchOrNewUpMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
343
- fetchOrCreateMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
344
- updateOrCreateMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
345
- query: <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Result = InstanceType<Model_1>>(this: Model_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_1, Result>;
341
+ first: <T extends LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
342
+ firstOrFail: <T extends LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
343
+ findMany: <T extends LucidModel>(this: T, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
344
+ firstOrNew: <T extends LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
345
+ firstOrCreate: <T extends LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
346
+ updateOrCreate: <T extends LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, updatePayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
347
+ fetchOrNewUpMany: <T extends LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
348
+ fetchOrCreateMany: <T extends LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
349
+ updateOrCreateMany: <T extends LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
350
+ query: <Model_1 extends LucidModel, Result = InstanceType<Model_1>>(this: Model_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => ModelQueryBuilderContract<Model_1, Result>;
351
+ transaction: import("@adonisjs/lucid/types/database").TransactionFn;
352
+ truncate: (cascade?: boolean) => Promise<void>;
353
+ } & Model;
354
+ export declare function permissionQueryHelpers(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => {
355
+ new (...args: any[]): {
356
+ _roles: ManyToMany<typeof Role>;
357
+ _whereRoles<TargetClass extends Model>(query: ModelQueryBuilderContract<LucidModel, LucidRow>, targetClass: TargetClass, ...roles: string[]): ModelQueryBuilderContract<LucidModel, LucidRow>;
358
+ _permissions: ManyToMany<typeof Permission>;
359
+ _whereDirectPermissions<TargetClass extends Model>(query: ModelQueryBuilderContract<LucidModel, LucidRow>, targetClass: TargetClass, permissions: string[], target?: AclModel | Function): ModelQueryBuilderContract<LucidModel, LucidRow>;
360
+ _model_roles: HasMany<typeof ModelRole>;
361
+ _whereRolePermissions<TargetClass extends Model>(query: ModelQueryBuilderContract<LucidModel, LucidRow>, targetClass: TargetClass, permissions: string[], target?: AclModel | Function): ModelQueryBuilderContract<LucidModel, LucidRow>;
362
+ _wherePermissions<TargetClass extends Model>(query: ModelQueryBuilderContract<LucidModel, LucidRow>, targetClass: TargetClass, permissions: string[], target?: AclModel | Function): void;
363
+ $attributes: import("@adonisjs/lucid/types/model").ModelObject;
364
+ $extras: import("@adonisjs/lucid/types/model").ModelObject;
365
+ $original: import("@adonisjs/lucid/types/model").ModelObject;
366
+ $preloaded: {
367
+ [relation: string]: LucidRow | LucidRow[];
368
+ };
369
+ $columns: undefined;
370
+ $sideloaded: import("@adonisjs/lucid/types/model").ModelObject;
371
+ $primaryKeyValue?: number | string;
372
+ $isPersisted: boolean;
373
+ $isNew: boolean;
374
+ $isLocal: boolean;
375
+ $dirty: import("@adonisjs/lucid/types/model").ModelObject;
376
+ $isDirty: boolean;
377
+ $isDeleted: boolean;
378
+ $options?: import("@adonisjs/lucid/types/model").ModelOptions;
379
+ $trx?: import("@adonisjs/lucid/types/database").TransactionClientContract;
380
+ $setOptionsAndTrx(options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): void;
381
+ useTransaction(trx: import("@adonisjs/lucid/types/database").TransactionClientContract): /*elided*/ any;
382
+ useConnection(connection: string): /*elided*/ any;
383
+ $getQueryFor(action: "insert", client: import("@adonisjs/lucid/types/database").QueryClientContract): ReturnType<import("@adonisjs/lucid/types/database").QueryClientContract["insertQuery"]>;
384
+ $getQueryFor(action: "update" | "delete" | "refresh", client: import("@adonisjs/lucid/types/database").QueryClientContract): ModelQueryBuilderContract<LucidModel>;
385
+ $setAttribute(key: string, value: any): void;
386
+ $getAttribute(key: string): any;
387
+ $getAttributeFromCache(key: string, callback: import("@adonisjs/lucid/types/model").CacheNode["getter"]): any;
388
+ $hasRelated(key: string): boolean;
389
+ $setRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<LucidRow> | null): void;
390
+ $pushRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<LucidRow> | null): void;
391
+ $getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<LucidRow> | undefined | null;
392
+ $consumeAdapterResult(adapterResult: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject): void;
393
+ $hydrateOriginals(): void;
394
+ fill(value: Partial<{}>, allowExtraProperties?: boolean): /*elided*/ any;
395
+ merge(value: Partial<{}>, allowExtraProperties?: boolean): /*elided*/ any;
396
+ isDirty(fields?: undefined[] | undefined): boolean;
397
+ enableForceUpdate(): /*elided*/ any;
398
+ save(): Promise</*elided*/ any>;
399
+ saveQuietly(): Promise</*elided*/ any>;
400
+ lockForUpdate<T>(callback: (user: /*elided*/ any) => T | Promise<T>): Promise<T>;
401
+ delete(): Promise<void>;
402
+ deleteQuietly(): Promise<void>;
403
+ refresh(): Promise</*elided*/ any>;
404
+ load: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
405
+ loadOnce: import("@adonisjs/lucid/types/model").LucidRowPreloadOnce</*elided*/ any>;
406
+ preload: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
407
+ loadAggregate: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = Self[Name] extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? Self[Name]["subQuery"] : never>(name: Name, callback: (builder: RelatedBuilder) => void) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
408
+ loadCount: <Self extends /*elided*/ any, Name_1 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder_1 = Self[Name_1] extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? Self[Name_1]["subQuery"] : never>(name: Name_1, callback?: ((builder: RelatedBuilder_1) => void) | undefined) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
409
+ serializeAttributes(fields?: import("@adonisjs/lucid/types/model").CherryPickFields, raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
410
+ serializeComputed(fields?: import("@adonisjs/lucid/types/model").CherryPickFields): import("@adonisjs/lucid/types/model").ModelObject;
411
+ serializeRelations(fields: undefined, raw: true): {
412
+ [key: string]: LucidRow | LucidRow[];
413
+ };
414
+ serializeRelations(cherryPick: import("@adonisjs/lucid/types/model").CherryPick["relations"] | undefined, raw: false | undefined): import("@adonisjs/lucid/types/model").ModelObject;
415
+ serializeRelations(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick["relations"], raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
416
+ serialize(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick): import("@adonisjs/lucid/types/model").ModelObject;
417
+ toObject(): import("@adonisjs/lucid/types/model").ModelObject;
418
+ toJSON(): import("@adonisjs/lucid/types/model").ModelObject;
419
+ related<Name_2 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations</*elided*/ any>>(relation: Name_2): /*elided*/ any[Name_2] extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? /*elided*/ any[Name_2]["client"] : never;
420
+ };
421
+ find: <T extends LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
422
+ all: <T extends LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
423
+ namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract;
424
+ connection?: string | undefined;
425
+ readonly booted: boolean;
426
+ $columnsDefinitions: Map<string, import("@adonisjs/lucid/types/model").ModelColumnOptions>;
427
+ $relationsDefinitions: Map<string, import("@adonisjs/lucid/types/relations").RelationshipsContract>;
428
+ $computedDefinitions: Map<string, import("@adonisjs/lucid/types/model").ComputedOptions>;
429
+ primaryKey: string;
430
+ table: string;
431
+ selfAssignPrimaryKey: boolean;
432
+ $adapter: import("@adonisjs/lucid/types/model").AdapterContract;
433
+ useAdapter: (adapter: import("@adonisjs/lucid/types/model").AdapterContract) => void;
434
+ $hooks: import("@poppinss/hooks").default<any>;
435
+ $keys: {
436
+ attributesToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
437
+ attributesToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract;
438
+ columnsToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
439
+ columnsToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract;
440
+ serializedToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
441
+ serializedToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
442
+ };
443
+ $createFromAdapterResult: <T extends LucidModel>(this: T, result?: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => null | InstanceType<T>;
444
+ $createMultipleFromAdapterResult: <T extends LucidModel>(this: T, results: import("@adonisjs/lucid/types/model").ModelObject[], sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => InstanceType<T>[];
445
+ $addColumn: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ColumnOptions>) => import("@adonisjs/lucid/types/model").ColumnOptions;
446
+ $hasColumn: (name: string) => boolean;
447
+ $getColumn: (name: string) => import("@adonisjs/lucid/types/model").ModelColumnOptions | undefined;
448
+ $addComputed: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ComputedOptions>) => import("@adonisjs/lucid/types/model").ComputedOptions;
449
+ $hasComputed: (name: string) => boolean;
450
+ $getComputed: (name: string) => import("@adonisjs/lucid/types/model").ComputedOptions | undefined;
451
+ $addRelation: (name: string, type: import("@adonisjs/lucid/types/relations").ModelRelationTypes["__opaque_type"], relatedModel: () => LucidModel, options: import("@adonisjs/lucid/types/model").ModelRelationOptions) => void;
452
+ $hasRelation: (name: string) => boolean;
453
+ $getRelation: {
454
+ <Model_1 extends LucidModel, Name_2 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<InstanceType<Model_1>>>(this: Model_1, name: Name_2): InstanceType<Model_1>[Name_2] extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? InstanceType<Model_1>[Name_2]["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract;
455
+ <Model_1 extends LucidModel>(this: Model_1, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
456
+ };
457
+ $defineProperty: <Model_1 extends LucidModel, Prop extends keyof Model_1>(this: Model_1, propertyName: Prop, defaultValue: Model_1[Prop], strategy: "inherit" | "define" | ((value: Model_1[Prop]) => Model_1[Prop])) => void;
458
+ boot: () => void;
459
+ before: {
460
+ <Model_1 extends LucidModel, Event extends "find" | "fetch">(this: Model_1, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<ModelQueryBuilderContract<Model_1>, Event>): void;
461
+ <Model_1 extends LucidModel>(this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<[ModelQueryBuilderContract<Model_1>, ModelQueryBuilderContract<Model_1>], "paginate">): void;
462
+ <Model_1 extends LucidModel, Event_1 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event_1, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event_1>): void;
463
+ };
464
+ after: {
465
+ <Model_1 extends LucidModel>(this: Model_1, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>[], "fetch">): void;
466
+ <Model_1 extends LucidModel>(this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelPaginatorContract<InstanceType<Model_1>>, "paginate">): void;
467
+ <Model_1 extends LucidModel, Event_2 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event_2, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event_2>): void;
468
+ };
469
+ create: <T extends LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
470
+ createQuietly: <T extends LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
471
+ createMany: <T extends LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
472
+ createManyQuietly: <T extends LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
473
+ findOrFail: <T extends LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
474
+ findBy: {
475
+ <T extends LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T>>;
476
+ <T extends LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T>>;
477
+ };
478
+ findByOrFail: {
479
+ <T extends LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
480
+ <T extends LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
481
+ };
482
+ findManyBy: {
483
+ <T extends LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
484
+ <T extends LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
485
+ };
486
+ first: <T extends LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
487
+ firstOrFail: <T extends LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
488
+ findMany: <T extends LucidModel>(this: T, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
489
+ firstOrNew: <T extends LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
490
+ firstOrCreate: <T extends LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
491
+ updateOrCreate: <T extends LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, updatePayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
492
+ fetchOrNewUpMany: <T extends LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
493
+ fetchOrCreateMany: <T extends LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
494
+ updateOrCreateMany: <T extends LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
495
+ query: <Model_1 extends LucidModel, Result = InstanceType<Model_1>>(this: Model_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => ModelQueryBuilderContract<Model_1, Result>;
346
496
  transaction: import("@adonisjs/lucid/types/database").TransactionFn;
347
497
  truncate: (cascade?: boolean) => Promise<void>;
348
498
  } & Model;
@@ -1,4 +1,16 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { manyToMany, hasMany } from '@adonisjs/lucid/orm';
1
8
  import { Acl } from '../acl.js';
9
+ import Role from '../models/role.js';
10
+ import { ModelRole, Permission } from '../../index.js';
11
+ import ModelPermission from '../models/model_permission.js';
12
+ import { morphMap } from '@holoyan/morph-map-js';
13
+ import { applyTargetRestriction, destructTarget } from '../services/helper.js';
2
14
  export function hasPermissions() {
3
15
  return (superclass) => {
4
16
  class HasPermissionsMixin extends superclass {
@@ -295,3 +307,102 @@ export function hasPermissions() {
295
307
  return HasPermissionsMixin;
296
308
  };
297
309
  }
310
+ export function permissionQueryHelpers() {
311
+ return (superclass) => {
312
+ class QueryHelpersMixin extends superclass {
313
+ _whereRoles(query, targetClass, ...roles) {
314
+ return query.whereHas(
315
+ // @ts-ignore
316
+ '_roles', (rolesQuery) => {
317
+ rolesQuery.whereIn('slug', roles).where('model_type', morphMap.getAlias(targetClass));
318
+ });
319
+ }
320
+ _whereDirectPermissions(query, targetClass, permissions, target) {
321
+ return query.whereHas(
322
+ // @ts-ignore
323
+ '_permissions', (permissionsQuery) => {
324
+ const entity = destructTarget(morphMap, target);
325
+ permissionsQuery
326
+ .whereIn('slug', permissions)
327
+ .where('model_type', morphMap.getAlias(targetClass))
328
+ .whereNotExists((subQuery) => {
329
+ subQuery
330
+ .from(Permission.table + ' as p2')
331
+ .leftJoin(ModelPermission.table + ' as mp2', 'mp2.permission_id', '=', 'p2.id')
332
+ .where('p2.allowed', false)
333
+ .whereRaw('p2.slug=' + Permission.table + '.slug')
334
+ .whereRaw('p2.scope=' + Permission.table + '.scope')
335
+ .whereColumn('mp2.model_id', targetClass.table + '.id')
336
+ .where('mp2.model_type', morphMap.getAlias(targetClass))
337
+ .select('p2.slug')
338
+ .groupBy('p2.slug');
339
+ });
340
+ applyTargetRestriction(Permission.table, permissionsQuery, entity.targetClass, entity.targetId);
341
+ });
342
+ }
343
+ _whereRolePermissions(query, targetClass, permissions, target) {
344
+ return query.whereHas(
345
+ // @ts-ignore
346
+ '_model_roles', (rolesQuery) => {
347
+ const entity = destructTarget(morphMap, target);
348
+ rolesQuery
349
+ .where(ModelRole.table + '.model_type', morphMap.getAlias(targetClass))
350
+ .join(ModelPermission.table + ' as mp', 'mp.model_id', '=', ModelRole.table + '.role_id')
351
+ .where('mp.model_type', 'roles')
352
+ .join(Permission.table + ' as p', 'p.id', '=', 'mp.permission_id')
353
+ .whereIn('p.slug', permissions)
354
+ .whereNotExists((subQuery) => {
355
+ subQuery
356
+ .from(Permission.table + ' as p2')
357
+ .leftJoin(ModelPermission.table + ' as mp2', 'mp2.permission_id', '=', 'p2.id')
358
+ .where('p2.allowed', false)
359
+ .whereRaw('p2.slug=' + 'p.slug')
360
+ .whereRaw('p2.scope=' + 'p.scope')
361
+ .whereColumn('mp2.model_id', targetClass.table + '.id')
362
+ .where('mp2.model_type', morphMap.getAlias(targetClass))
363
+ .select('p2.slug')
364
+ .groupBy('p2.slug');
365
+ });
366
+ applyTargetRestriction('p', rolesQuery, entity.targetClass, entity.targetId);
367
+ });
368
+ }
369
+ _wherePermissions(query, targetClass, permissions, target) {
370
+ query
371
+ .where((subQuery) => {
372
+ this._whereDirectPermissions(subQuery, targetClass, permissions, target);
373
+ })
374
+ .orWhere((subQuery) => {
375
+ this._whereRolePermissions(subQuery, targetClass, permissions, target);
376
+ });
377
+ }
378
+ }
379
+ __decorate([
380
+ manyToMany(() => Role, {
381
+ localKey: 'id',
382
+ relatedKey: 'id',
383
+ pivotForeignKey: 'model_id',
384
+ pivotRelatedForeignKey: 'role_id',
385
+ pivotTable: 'model_roles',
386
+ pivotColumns: ['model_type'],
387
+ pivotTimestamps: true,
388
+ })
389
+ ], QueryHelpersMixin.prototype, "_roles", void 0);
390
+ __decorate([
391
+ manyToMany(() => Permission, {
392
+ localKey: 'id',
393
+ relatedKey: 'id',
394
+ pivotForeignKey: 'model_id',
395
+ pivotRelatedForeignKey: 'permission_id',
396
+ pivotTable: 'model_permissions',
397
+ pivotColumns: ['model_type'],
398
+ pivotTimestamps: true,
399
+ })
400
+ ], QueryHelpersMixin.prototype, "_permissions", void 0);
401
+ __decorate([
402
+ hasMany(() => ModelRole, {
403
+ foreignKey: 'modelId',
404
+ })
405
+ ], QueryHelpersMixin.prototype, "_model_roles", void 0);
406
+ return QueryHelpersMixin;
407
+ };
408
+ }
@@ -1,4 +1,7 @@
1
- import { AclModel, MorphInterface } from '../types.js';
1
+ import { AclModel, ModelIdType, MorphInterface, PermissionInterface } from '../types.js';
2
+ import type { ManyToManySubQueryBuilderContract, RelationSubQueryBuilderContract } from '@adonisjs/lucid/types/relations';
3
+ import { ModelRole, Permission } from '../../index.js';
4
+ import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
2
5
  export declare function formatList(models: (string | number | any)[]): {
3
6
  slugs: string[];
4
7
  ids: number[];
@@ -11,10 +14,11 @@ export declare function formatStringNumbers(models: string | number | any): {
11
14
  slugs: string[];
12
15
  ids: number[];
13
16
  };
14
- export declare function destructTarget(map: MorphInterface, target?: AclModel | Function): Promise<{
17
+ export declare function destructTarget(map: MorphInterface, target?: AclModel | Function): {
15
18
  targetClass: null;
16
19
  targetId: null;
17
20
  } | {
18
21
  targetClass: string;
19
- targetId: import("../types.js").ModelIdType | null;
20
- }>;
22
+ targetId: ModelIdType | null;
23
+ };
24
+ export declare function applyTargetRestriction(table: string, q: ManyToManySubQueryBuilderContract<typeof Permission> | ModelQueryBuilderContract<typeof Permission, PermissionInterface> | RelationSubQueryBuilderContract<typeof ModelRole>, entityType: string | null, entityId: ModelIdType | null): void;
@@ -47,7 +47,7 @@ export function formatStringNumbers(models) {
47
47
  }
48
48
  return { slugs, ids };
49
49
  }
50
- export async function destructTarget(map, target) {
50
+ export function destructTarget(map, target) {
51
51
  if (!target) {
52
52
  return {
53
53
  targetClass: null,
@@ -62,3 +62,21 @@ export async function destructTarget(map, target) {
62
62
  function isAclModelInterface(obj) {
63
63
  return typeof obj === 'object' && typeof obj.getModelId === 'function';
64
64
  }
65
+ export function applyTargetRestriction(table, q, entityType, entityId) {
66
+ if (entityType) {
67
+ q.where((query) => {
68
+ query.where(table + '.entity_type', entityType).orWhere(table + '.entity_type', '*');
69
+ });
70
+ if (entityId) {
71
+ q.where((query) => {
72
+ query.where(table + '.entity_id', entityId).orWhereNull(table + '.entity_id');
73
+ });
74
+ }
75
+ else {
76
+ q.whereNull(table + '.entity_id');
77
+ }
78
+ }
79
+ else {
80
+ q.where(table + '.entity_type', '*').whereNull(table + '.entity_id');
81
+ }
82
+ }
@@ -186,22 +186,22 @@ export class ModelHasRolePermissions extends BaseAdapter {
186
186
  * @param target
187
187
  */
188
188
  async hasAllPermissions(permissions, target) {
189
- const entity = await destructTarget(this.map, target);
189
+ const entity = destructTarget(this.map, target);
190
190
  return await this.permissionService.hasAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
191
191
  }
192
192
  async hasAnyPermission(permissions, target) {
193
- const entity = await destructTarget(this.map, target);
193
+ const entity = destructTarget(this.map, target);
194
194
  return await this.permissionService.hasAny(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
195
195
  }
196
196
  async hasAnyDirectPermission(permissions, target) {
197
- const entity = await destructTarget(this.map, target);
197
+ const entity = destructTarget(this.map, target);
198
198
  return await this.permissionService.hasAnyDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
199
199
  }
200
200
  async hasDirectPermission(permission, target) {
201
201
  return this.hasAnyDirectPermission([permission], target);
202
202
  }
203
203
  async hasAllPermissionsDirect(permissions, target) {
204
- const entity = await destructTarget(this.map, target);
204
+ const entity = destructTarget(this.map, target);
205
205
  return await this.permissionService.hasAllDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
206
206
  }
207
207
  can(permission, target) {
@@ -227,7 +227,7 @@ export class ModelHasRolePermissions extends BaseAdapter {
227
227
  * @param target
228
228
  */
229
229
  async assignDirectAllPermissions(permissions, target) {
230
- const entity = await destructTarget(this.map, target);
230
+ const entity = destructTarget(this.map, target);
231
231
  const assigned = await this.permissionService.giveAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId, true);
232
232
  this.fire(PermissionsAttachedToModelEvent, assigned.map((item) => item.permissionId), this.model);
233
233
  return assigned;
@@ -282,7 +282,7 @@ export class ModelHasRolePermissions extends BaseAdapter {
282
282
  * @param target
283
283
  */
284
284
  async revokeAllPermissions(permissions, target) {
285
- const entity = await destructTarget(this.map, target);
285
+ const entity = destructTarget(this.map, target);
286
286
  const revoked = this.permissionService.revokeAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
287
287
  this.fire(PermissionsDetachedFromModelEvent, permissions, this.model);
288
288
  return revoked;
@@ -320,7 +320,7 @@ export class ModelHasRolePermissions extends BaseAdapter {
320
320
  * @param target
321
321
  */
322
322
  async forbidAll(permissions, target) {
323
- const entity = await destructTarget(this.map, target);
323
+ const entity = destructTarget(this.map, target);
324
324
  const forbade = await this.permissionService.forbidAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
325
325
  this.fire(PermissionsForbadeEvent, forbade.map((item) => item.permissionId), this.model);
326
326
  }
@@ -329,7 +329,7 @@ export class ModelHasRolePermissions extends BaseAdapter {
329
329
  * @param target
330
330
  */
331
331
  async unforbidAll(permissions, target) {
332
- const entity = await destructTarget(this.map, target);
332
+ const entity = destructTarget(this.map, target);
333
333
  const unforbade = await this.permissionService.unforbidAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
334
334
  if (unforbade.length) {
335
335
  this.fire(PermissionsUnForbadeEvent, unforbade.map((item) => item.permissionId), this.model);
@@ -84,7 +84,7 @@ export default class PermissionHasModelRoles extends BaseAdapter {
84
84
  }
85
85
  role = String(r.id);
86
86
  }
87
- const entity = await destructTarget(this.map, target);
87
+ const entity = destructTarget(this.map, target);
88
88
  const attached = await this.permissionService.giveAll(this.map.getAlias(this.roleClassName), role, [this.permission.slug], entity.targetClass, entity.targetId, true);
89
89
  if (attached.length > 0) {
90
90
  this.fire(PermissionsAttachedToRoleEvent, attached.map((item) => item.permissionId), role);
@@ -1,4 +1,5 @@
1
1
  import BaseService from '../base_service.js';
2
+ import { applyTargetRestriction } from '../helper.js';
2
3
  export default class PermissionsService extends BaseService {
3
4
  options;
4
5
  scope;
@@ -229,6 +230,7 @@ export default class PermissionsService extends BaseService {
229
230
  directPermissions: this.map.getAlias(this.roleClassName) === modelType,
230
231
  permissionSlugs: slugs,
231
232
  permissionIds: ids,
233
+ includeForbiddings: true,
232
234
  }).distinct(this.permissionTable + '.id');
233
235
  const r = await q.select(this.permissionTable + '.id');
234
236
  // @ts-ignore
@@ -245,6 +247,7 @@ export default class PermissionsService extends BaseService {
245
247
  directPermissions: true,
246
248
  permissionSlugs: slugs,
247
249
  permissionIds: ids,
250
+ includeForbiddings: true,
248
251
  }).distinct(this.permissionTable + '.id');
249
252
  const r = await q.select(this.permissionTable + '.id');
250
253
  return r.length >= permission.length;
@@ -260,6 +263,7 @@ export default class PermissionsService extends BaseService {
260
263
  directPermissions: true,
261
264
  permissionSlugs: slugs,
262
265
  permissionIds: ids,
266
+ includeForbiddings: true,
263
267
  }).distinct(this.permissionTable + '.id');
264
268
  const r = await q.select(this.permissionTable + '.id');
265
269
  // @ts-ignore
@@ -393,16 +397,20 @@ export default class PermissionsService extends BaseService {
393
397
  const q = this.permissionQuery.leftJoin(this.modelPermissionTable + ' as mp', 'mp.permission_id', '=', this.permissionTable + '.id');
394
398
  if (modelId && modelType) {
395
399
  if (directPermissions) {
400
+ // check direct-assigned permissions
396
401
  q.where('mp.model_type', modelType).where('mp.model_id', modelId);
397
402
  }
398
403
  else {
404
+ //
399
405
  q.leftJoin(this.modelRoleTable + ' as mr', (joinQuery) => {
400
406
  joinQuery.onVal('mr.model_type', modelType).onVal('mr.model_id', modelId);
401
407
  });
402
408
  if (conditions.throughRoles) {
409
+ // only through roles
403
410
  q.whereRaw('mr.role_id=mp.model_id').where('mp.model_type', 'roles');
404
411
  }
405
412
  else {
413
+ // check direct-assigned permissions and through roles
406
414
  q.where((subQuery) => {
407
415
  subQuery
408
416
  .where((query) => {
@@ -410,9 +418,6 @@ export default class PermissionsService extends BaseService {
410
418
  })
411
419
  .orWhere((query) => {
412
420
  query.whereRaw('mr.role_id=mp.model_id').where('mp.model_type', 'roles');
413
- // query
414
- // .whereRaw('CAST(mr.role_id AS CHAR)=mp.model_id')
415
- // .where('mp.model_type', 'roles')
416
421
  });
417
422
  });
418
423
  }
@@ -489,22 +494,7 @@ export default class PermissionsService extends BaseService {
489
494
  return q;
490
495
  }
491
496
  applyTargetRestriction(table, q, entityType, entityId) {
492
- if (entityType) {
493
- q.where((query) => {
494
- query.where(table + '.entity_type', entityType).orWhere(table + '.entity_type', '*');
495
- });
496
- if (entityId) {
497
- q.where((query) => {
498
- query.where(table + '.entity_id', entityId).orWhereNull(table + '.entity_id');
499
- });
500
- }
501
- else {
502
- q.whereNull(table + '.entity_id');
503
- }
504
- }
505
- else {
506
- q.where(table + '.entity_type', '*').whereNull(table + '.entity_id');
507
- }
497
+ applyTargetRestriction(table, q, entityType, entityId);
508
498
  }
509
499
  applyScopes(q) {
510
500
  q.where(this.permissionTable + '.scope', this.scope.get());
@@ -71,7 +71,7 @@ export class RoleHasModelPermissions extends BaseAdapter {
71
71
  return result;
72
72
  }
73
73
  async hasPermission(permission, target) {
74
- const entity = await destructTarget(this.map, target);
74
+ const entity = destructTarget(this.map, target);
75
75
  const result = await this.permissionService.hasAny(this.map.getAlias(this.role), this.role.getModelId(), [permission], entity.targetClass, entity.targetId);
76
76
  return result;
77
77
  }
@@ -82,7 +82,7 @@ export class RoleHasModelPermissions extends BaseAdapter {
82
82
  * @returns
83
83
  */
84
84
  async hasAllPermissions(permissions, target) {
85
- const entity = await destructTarget(this.map, target);
85
+ const entity = destructTarget(this.map, target);
86
86
  const result = await this.permissionService.hasAll(this.map.getAlias(this.role), this.role.getModelId(), permissions, entity.targetClass, entity.targetId);
87
87
  return result;
88
88
  }
@@ -93,7 +93,7 @@ export class RoleHasModelPermissions extends BaseAdapter {
93
93
  * @returns
94
94
  */
95
95
  async hasAnyPermissions(permissions, target) {
96
- const entity = await destructTarget(this.map, target);
96
+ const entity = destructTarget(this.map, target);
97
97
  const result = await this.permissionService.hasAny(this.map.getAlias(this.role), this.role.getModelId(), permissions, entity.targetClass, entity.targetId);
98
98
  return result;
99
99
  }
@@ -112,7 +112,7 @@ export class RoleHasModelPermissions extends BaseAdapter {
112
112
  return this.hasAnyPermissions(permissions);
113
113
  }
114
114
  async forbidden(permission, target) {
115
- const entity = await destructTarget(this.map, target);
115
+ const entity = destructTarget(this.map, target);
116
116
  return this.permissionService.forbidden(this.map.getAlias(this.role), this.role.getModelId(), permission, entity.targetClass, entity.targetId);
117
117
  }
118
118
  /**
@@ -144,7 +144,7 @@ export class RoleHasModelPermissions extends BaseAdapter {
144
144
  * @param target
145
145
  */
146
146
  async giveAll(permissions, target) {
147
- const entity = await destructTarget(this.map, target);
147
+ const entity = destructTarget(this.map, target);
148
148
  const attached = await this.permissionService.giveAll(this.map.getAlias(this.role), this.role.getModelId(), permissions, entity.targetClass, entity.targetId, true);
149
149
  if (attached.length > 0) {
150
150
  this.fire(PermissionsAttachedToRoleEvent, attached.map((item) => item.permissionId), this.role.getModelId());
@@ -182,7 +182,7 @@ export class RoleHasModelPermissions extends BaseAdapter {
182
182
  return this.revokeAll([permission]);
183
183
  }
184
184
  async revokeAll(permissions, target) {
185
- const entity = await destructTarget(this.map, target);
185
+ const entity = destructTarget(this.map, target);
186
186
  const revoked = await this.permissionService.revokeAll(this.map.getAlias(this.role), this.role.getModelId(), permissions, entity.targetClass, entity.targetId);
187
187
  if (revoked.length > 0) {
188
188
  this.fire(PermissionsDetachedFromRoleEvent, permissions, this.role.getModelId());
@@ -211,11 +211,11 @@ export class RoleHasModelPermissions extends BaseAdapter {
211
211
  return this.giveAll(permissions, target);
212
212
  }
213
213
  async forbid(permission, target) {
214
- const entity = await destructTarget(this.map, target);
214
+ const entity = destructTarget(this.map, target);
215
215
  return this.permissionService.forbid(this.map.getAlias(this.role), this.role.getModelId(), permission, entity.targetClass, entity.targetId);
216
216
  }
217
217
  async unforbid(permission, target) {
218
- const entity = await destructTarget(this.map, target);
218
+ const entity = destructTarget(this.map, target);
219
219
  return this.permissionService.unforbidAll(this.map.getAlias(this.role), this.role.getModelId(), [permission], entity.targetClass, entity.targetId);
220
220
  }
221
221
  }
@@ -69,9 +69,6 @@ export interface ModelPermissionsQuery extends AclModelQuery {
69
69
  entity: Entity;
70
70
  throughRoles: boolean;
71
71
  }
72
- export interface MorphMapInterface {
73
- [key: string]: any;
74
- }
75
72
  export interface MorphInterface {
76
73
  set(alias: string, target: any): void;
77
74
  get(alias: string): any;
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": "1.2.0",
4
+ "version": "1.3.0",
5
5
  "engines": {
6
6
  "node": ">=18.16.0"
7
7
  },