@holoyan/adonisjs-permissions 1.3.0 → 1.3.2
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 +17 -2
- package/build/src/mixins/has_permissions.d.ts +57 -47
- package/build/src/mixins/has_permissions.js +8 -0
- package/build/src/services/helper.d.ts +5 -0
- package/build/src/services/helper.js +7 -0
- package/build/src/services/models/model_has_role_permissions.d.ts +31 -13
- package/build/src/services/models/model_has_role_permissions.js +25 -0
- package/build/src/services/permissions/empty_permission.d.ts +1 -1
- package/build/src/services/permissions/permission_has_model_roles.d.ts +2 -2
- package/build/src/services/permissions/permissions_service.d.ts +12 -7
- package/build/src/services/permissions/permissions_service.js +25 -1
- package/build/src/services/roles/empty_roles.d.ts +1 -1
- package/build/src/services/roles/role_has_model_permissions.d.ts +11 -11
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,8 +14,8 @@ Checkout other AdonisJS packages
|
|
|
14
14
|
|
|
15
15
|
## Release Notes
|
|
16
16
|
|
|
17
|
-
Version: >= v1.3.
|
|
18
|
-
*
|
|
17
|
+
Version: >= v1.3.2
|
|
18
|
+
* Fixed `permissionQueryHelpers()` mixin leaking internal relations (`_roles`, `_permissions`, `_model_roles`) into the public `related()` API, which caused incorrect IDE type inference on user-defined relations
|
|
19
19
|
|
|
20
20
|
## Table of Contents
|
|
21
21
|
|
|
@@ -504,6 +504,21 @@ await Acl.role(role).hasAnyPermission(['update', 'read'])
|
|
|
504
504
|
|
|
505
505
|
```
|
|
506
506
|
|
|
507
|
+
### Checking partial permissions
|
|
508
|
+
|
|
509
|
+
Sometimes you might want to check if a user has a specific permission on any instance of a model class, rather than checking for global permissions or permissions on a specific instance. For this purpose, you can use the `canPartially` method:
|
|
510
|
+
|
|
511
|
+
```typescript
|
|
512
|
+
|
|
513
|
+
const postWithId = await Post.find(id)
|
|
514
|
+
await Acl.model(user).allow('create', postWithId) // allow 'create' on post instance
|
|
515
|
+
|
|
516
|
+
// This is useful when you want to know if a user has permission on at least one instance
|
|
517
|
+
Acl.model(user).can('create') // will return false
|
|
518
|
+
Acl.model(user).can('create', Post) // will return false
|
|
519
|
+
Acl.model(user).canPartially('create', Post) // will return true because user has a 'create' permission on postWithId instance
|
|
520
|
+
```
|
|
521
|
+
|
|
507
522
|
### Middleware
|
|
508
523
|
|
|
509
524
|
You are free to do your check anywhere, for example we can create [named](https://docs.adonisjs.com/guides/middleware#named-middleware-collection) middleware and do checking
|
|
@@ -1,10 +1,8 @@
|
|
|
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
4
|
import Role from '../models/role.js';
|
|
6
5
|
import { LucidModel, LucidRow, ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
|
|
7
|
-
import { ModelRole, Permission } from '../../index.js';
|
|
8
6
|
import ModelPermission from '../models/model_permission.js';
|
|
9
7
|
export declare function hasPermissions(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => {
|
|
10
8
|
new (...args: any[]): {
|
|
@@ -47,27 +45,27 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
|
|
|
47
45
|
* returns list of permissions assigned to the model
|
|
48
46
|
* @param includeForbiddings
|
|
49
47
|
*/
|
|
50
|
-
permissions(includeForbiddings?: boolean): Promise<import("../models/permission.
|
|
48
|
+
permissions(includeForbiddings?: boolean): Promise<import("../models/permission.ts").default[]>;
|
|
51
49
|
/**
|
|
52
50
|
* returns list of global permissions assigned to the model
|
|
53
51
|
* @param includeForbiddings
|
|
54
52
|
*/
|
|
55
|
-
globalPermissions(includeForbiddings?: boolean): Promise<import("../models/permission.
|
|
53
|
+
globalPermissions(includeForbiddings?: boolean): Promise<import("../models/permission.ts").default[]>;
|
|
56
54
|
/**
|
|
57
55
|
* returns list of resource permissions assigned to the model
|
|
58
56
|
* @param includeForbiddings
|
|
59
57
|
*/
|
|
60
|
-
onResourcePermissions(includeForbiddings?: boolean): Promise<import("../models/permission.
|
|
58
|
+
onResourcePermissions(includeForbiddings?: boolean): Promise<import("../models/permission.ts").default[]>;
|
|
61
59
|
/**
|
|
62
60
|
* Returns list of direct permissions assigned to the model
|
|
63
61
|
* @param includeForbiddings
|
|
64
62
|
*/
|
|
65
|
-
directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../models/permission.
|
|
63
|
+
directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../models/permission.ts").default[]>;
|
|
66
64
|
/**
|
|
67
65
|
* Returns list of direct resource permissions assigned to the model
|
|
68
66
|
* @param includeForbiddings
|
|
69
67
|
*/
|
|
70
|
-
directResourcePermissions(includeForbiddings?: boolean): Promise<import("../models/permission.
|
|
68
|
+
directResourcePermissions(includeForbiddings?: boolean): Promise<import("../models/permission.ts").default[]>;
|
|
71
69
|
/**
|
|
72
70
|
* Check if model has "contains" permission
|
|
73
71
|
* If permission is forbidden, it will return true
|
|
@@ -142,6 +140,12 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
|
|
|
142
140
|
*/
|
|
143
141
|
canAll(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
144
142
|
canAny(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
143
|
+
/**
|
|
144
|
+
* Check if a model has permission on any instance of a model class
|
|
145
|
+
* @param permission
|
|
146
|
+
* @param targetClass
|
|
147
|
+
*/
|
|
148
|
+
canPartially(permission: string, targetClass: Function): Promise<boolean>;
|
|
145
149
|
/**
|
|
146
150
|
* Check if model has any permission
|
|
147
151
|
* @param permission
|
|
@@ -221,7 +225,6 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
|
|
|
221
225
|
$preloaded: {
|
|
222
226
|
[relation: string]: LucidRow | LucidRow[];
|
|
223
227
|
};
|
|
224
|
-
$columns: undefined;
|
|
225
228
|
$sideloaded: import("@adonisjs/lucid/types/model").ModelObject;
|
|
226
229
|
$primaryKeyValue?: number | string;
|
|
227
230
|
$isPersisted: boolean;
|
|
@@ -246,8 +249,8 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
|
|
|
246
249
|
$getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<LucidRow> | undefined | null;
|
|
247
250
|
$consumeAdapterResult(adapterResult: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject): void;
|
|
248
251
|
$hydrateOriginals(): void;
|
|
249
|
-
fill(value: Partial<
|
|
250
|
-
merge(value: Partial<
|
|
252
|
+
fill(value: Partial<import("@adonisjs/lucid/types/model").ModelAttributes</*elided*/ any>>, allowExtraProperties?: boolean): /*elided*/ any;
|
|
253
|
+
merge(value: Partial<import("@adonisjs/lucid/types/model").ModelAttributes</*elided*/ any>>, allowExtraProperties?: boolean): /*elided*/ any;
|
|
251
254
|
isDirty(fields?: undefined[] | undefined): boolean;
|
|
252
255
|
enableForceUpdate(): /*elided*/ any;
|
|
253
256
|
save(): Promise</*elided*/ any>;
|
|
@@ -259,8 +262,8 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
|
|
|
259
262
|
load: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
|
|
260
263
|
loadOnce: import("@adonisjs/lucid/types/model").LucidRowPreloadOnce</*elided*/ any>;
|
|
261
264
|
preload: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
|
|
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>;
|
|
265
|
+
loadAggregate: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = NonNullable<Self[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? (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>;
|
|
266
|
+
loadCount: <Self extends /*elided*/ any, Name_1 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder_1 = NonNullable<Self[Name_1]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? (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>;
|
|
264
267
|
serializeAttributes(fields?: import("@adonisjs/lucid/types/model").CherryPickFields, raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
|
|
265
268
|
serializeComputed(fields?: import("@adonisjs/lucid/types/model").CherryPickFields): import("@adonisjs/lucid/types/model").ModelObject;
|
|
266
269
|
serializeRelations(fields: undefined, raw: true): {
|
|
@@ -271,18 +274,27 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
|
|
|
271
274
|
serialize(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick): import("@adonisjs/lucid/types/model").ModelObject;
|
|
272
275
|
toObject(): import("@adonisjs/lucid/types/model").ModelObject;
|
|
273
276
|
toJSON(): import("@adonisjs/lucid/types/model").ModelObject;
|
|
274
|
-
|
|
277
|
+
toAttributes(): Record<string, any>;
|
|
278
|
+
related<Name_2 extends undefined>(relation: Name_2): NonNullable</*elided*/ any[Name_2]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? (import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> & /*elided*/ any[Name_2] & {})["client"] : never;
|
|
279
|
+
};
|
|
280
|
+
connection?: string | undefined;
|
|
281
|
+
after: {
|
|
282
|
+
<Model_1 extends LucidModel>(this: Model_1, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>[], "fetch">): void;
|
|
283
|
+
<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;
|
|
284
|
+
<Model_1 extends LucidModel, Event extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event>): void;
|
|
275
285
|
};
|
|
286
|
+
query: <Model_1 extends LucidModel, Result = InstanceType<Model_1>>(this: Model_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => ModelQueryBuilderContract<Model_1, Result>;
|
|
287
|
+
truncate: (cascade?: boolean) => Promise<void>;
|
|
288
|
+
table: string;
|
|
289
|
+
transaction: import("@adonisjs/lucid/types/database").TransactionFn;
|
|
276
290
|
find: <T extends LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
|
|
277
291
|
all: <T extends LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
|
|
278
292
|
namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract;
|
|
279
|
-
connection?: string | undefined;
|
|
280
293
|
readonly booted: boolean;
|
|
281
294
|
$columnsDefinitions: Map<string, import("@adonisjs/lucid/types/model").ModelColumnOptions>;
|
|
282
295
|
$relationsDefinitions: Map<string, import("@adonisjs/lucid/types/relations").RelationshipsContract>;
|
|
283
296
|
$computedDefinitions: Map<string, import("@adonisjs/lucid/types/model").ComputedOptions>;
|
|
284
297
|
primaryKey: string;
|
|
285
|
-
table: string;
|
|
286
298
|
selfAssignPrimaryKey: boolean;
|
|
287
299
|
$adapter: import("@adonisjs/lucid/types/model").AdapterContract;
|
|
288
300
|
useAdapter: (adapter: import("@adonisjs/lucid/types/model").AdapterContract) => void;
|
|
@@ -294,31 +306,29 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
|
|
|
294
306
|
columnsToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
295
307
|
serializedToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
296
308
|
serializedToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
309
|
+
columnAliasesToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
297
310
|
};
|
|
298
311
|
$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
312
|
$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>[];
|
|
300
313
|
$addColumn: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ColumnOptions>) => import("@adonisjs/lucid/types/model").ColumnOptions;
|
|
301
314
|
$hasColumn: (name: string) => boolean;
|
|
302
315
|
$getColumn: (name: string) => import("@adonisjs/lucid/types/model").ModelColumnOptions | undefined;
|
|
316
|
+
$getColumnAlias: (columnName: string) => string;
|
|
317
|
+
columnsForSelect: () => Record<string, string>;
|
|
303
318
|
$addComputed: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ComputedOptions>) => import("@adonisjs/lucid/types/model").ComputedOptions;
|
|
304
319
|
$hasComputed: (name: string) => boolean;
|
|
305
320
|
$getComputed: (name: string) => import("@adonisjs/lucid/types/model").ComputedOptions | undefined;
|
|
306
321
|
$addRelation: (name: string, type: import("@adonisjs/lucid/types/relations").ModelRelationTypes["__opaque_type"], relatedModel: () => LucidModel, options: import("@adonisjs/lucid/types/model").ModelRelationOptions) => void;
|
|
307
322
|
$hasRelation: (name: string) => boolean;
|
|
308
323
|
$getRelation: {
|
|
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;
|
|
324
|
+
<Model_1 extends LucidModel, Name_2 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<InstanceType<Model_1>>>(this: Model_1, name: Name_2): NonNullable<InstanceType<Model_1>[Name_2]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? NonNullable<InstanceType<Model_1>[Name_2]>["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract;
|
|
310
325
|
<Model_1 extends LucidModel>(this: Model_1, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
|
|
311
326
|
};
|
|
312
327
|
$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;
|
|
313
328
|
boot: () => void;
|
|
314
329
|
before: {
|
|
315
|
-
<Model_1 extends LucidModel,
|
|
330
|
+
<Model_1 extends LucidModel, Event_1 extends "find" | "fetch">(this: Model_1, event: Event_1, handler: import("@adonisjs/lucid/types/model").HooksHandler<ModelQueryBuilderContract<Model_1>, Event_1>): void;
|
|
316
331
|
<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;
|
|
318
|
-
};
|
|
319
|
-
after: {
|
|
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
332
|
<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;
|
|
323
333
|
};
|
|
324
334
|
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>>;
|
|
@@ -347,17 +357,14 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<ty
|
|
|
347
357
|
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
358
|
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
359
|
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
360
|
} & Model;
|
|
354
361
|
export declare function permissionQueryHelpers(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => {
|
|
355
362
|
new (...args: any[]): {
|
|
356
|
-
_roles:
|
|
363
|
+
_roles: undefined;
|
|
357
364
|
_whereRoles<TargetClass extends Model>(query: ModelQueryBuilderContract<LucidModel, LucidRow>, targetClass: TargetClass, ...roles: string[]): ModelQueryBuilderContract<LucidModel, LucidRow>;
|
|
358
|
-
_permissions:
|
|
365
|
+
_permissions: undefined;
|
|
359
366
|
_whereDirectPermissions<TargetClass extends Model>(query: ModelQueryBuilderContract<LucidModel, LucidRow>, targetClass: TargetClass, permissions: string[], target?: AclModel | Function): ModelQueryBuilderContract<LucidModel, LucidRow>;
|
|
360
|
-
_model_roles:
|
|
367
|
+
_model_roles: undefined;
|
|
361
368
|
_whereRolePermissions<TargetClass extends Model>(query: ModelQueryBuilderContract<LucidModel, LucidRow>, targetClass: TargetClass, permissions: string[], target?: AclModel | Function): ModelQueryBuilderContract<LucidModel, LucidRow>;
|
|
362
369
|
_wherePermissions<TargetClass extends Model>(query: ModelQueryBuilderContract<LucidModel, LucidRow>, targetClass: TargetClass, permissions: string[], target?: AclModel | Function): void;
|
|
363
370
|
$attributes: import("@adonisjs/lucid/types/model").ModelObject;
|
|
@@ -366,7 +373,6 @@ export declare function permissionQueryHelpers(): <Model extends NormalizeConstr
|
|
|
366
373
|
$preloaded: {
|
|
367
374
|
[relation: string]: LucidRow | LucidRow[];
|
|
368
375
|
};
|
|
369
|
-
$columns: undefined;
|
|
370
376
|
$sideloaded: import("@adonisjs/lucid/types/model").ModelObject;
|
|
371
377
|
$primaryKeyValue?: number | string;
|
|
372
378
|
$isPersisted: boolean;
|
|
@@ -391,9 +397,9 @@ export declare function permissionQueryHelpers(): <Model extends NormalizeConstr
|
|
|
391
397
|
$getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<LucidRow> | undefined | null;
|
|
392
398
|
$consumeAdapterResult(adapterResult: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject): void;
|
|
393
399
|
$hydrateOriginals(): void;
|
|
394
|
-
fill(value: Partial<
|
|
395
|
-
merge(value: Partial<
|
|
396
|
-
isDirty(fields?: undefined[] | undefined): boolean;
|
|
400
|
+
fill(value: Partial<import("@adonisjs/lucid/types/model").ModelAttributes</*elided*/ any>>, allowExtraProperties?: boolean): /*elided*/ any;
|
|
401
|
+
merge(value: Partial<import("@adonisjs/lucid/types/model").ModelAttributes</*elided*/ any>>, allowExtraProperties?: boolean): /*elided*/ any;
|
|
402
|
+
isDirty(fields?: "_roles" | "_permissions" | "_model_roles" | ("_roles" | "_permissions" | "_model_roles" | undefined)[] | undefined): boolean;
|
|
397
403
|
enableForceUpdate(): /*elided*/ any;
|
|
398
404
|
save(): Promise</*elided*/ any>;
|
|
399
405
|
saveQuietly(): Promise</*elided*/ any>;
|
|
@@ -404,8 +410,8 @@ export declare function permissionQueryHelpers(): <Model extends NormalizeConstr
|
|
|
404
410
|
load: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
|
|
405
411
|
loadOnce: import("@adonisjs/lucid/types/model").LucidRowPreloadOnce</*elided*/ any>;
|
|
406
412
|
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>;
|
|
413
|
+
loadAggregate: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = NonNullable<Self[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? (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>;
|
|
414
|
+
loadCount: <Self extends /*elided*/ any, Name_1 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder_1 = NonNullable<Self[Name_1]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? (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
415
|
serializeAttributes(fields?: import("@adonisjs/lucid/types/model").CherryPickFields, raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
|
|
410
416
|
serializeComputed(fields?: import("@adonisjs/lucid/types/model").CherryPickFields): import("@adonisjs/lucid/types/model").ModelObject;
|
|
411
417
|
serializeRelations(fields: undefined, raw: true): {
|
|
@@ -416,18 +422,27 @@ export declare function permissionQueryHelpers(): <Model extends NormalizeConstr
|
|
|
416
422
|
serialize(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick): import("@adonisjs/lucid/types/model").ModelObject;
|
|
417
423
|
toObject(): import("@adonisjs/lucid/types/model").ModelObject;
|
|
418
424
|
toJSON(): import("@adonisjs/lucid/types/model").ModelObject;
|
|
419
|
-
|
|
425
|
+
toAttributes(): Record<string, any>;
|
|
426
|
+
related<Name_2 extends undefined>(relation: Name_2): NonNullable</*elided*/ any[Name_2]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? (import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> & /*elided*/ any[Name_2] & {})["client"] : never;
|
|
427
|
+
};
|
|
428
|
+
connection?: string | undefined;
|
|
429
|
+
after: {
|
|
430
|
+
<Model_1 extends LucidModel>(this: Model_1, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>[], "fetch">): void;
|
|
431
|
+
<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;
|
|
432
|
+
<Model_1 extends LucidModel, Event extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event>): void;
|
|
420
433
|
};
|
|
434
|
+
query: <Model_1 extends LucidModel, Result = InstanceType<Model_1>>(this: Model_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => ModelQueryBuilderContract<Model_1, Result>;
|
|
435
|
+
truncate: (cascade?: boolean) => Promise<void>;
|
|
436
|
+
table: string;
|
|
437
|
+
transaction: import("@adonisjs/lucid/types/database").TransactionFn;
|
|
421
438
|
find: <T extends LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
|
|
422
439
|
all: <T extends LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
|
|
423
440
|
namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract;
|
|
424
|
-
connection?: string | undefined;
|
|
425
441
|
readonly booted: boolean;
|
|
426
442
|
$columnsDefinitions: Map<string, import("@adonisjs/lucid/types/model").ModelColumnOptions>;
|
|
427
443
|
$relationsDefinitions: Map<string, import("@adonisjs/lucid/types/relations").RelationshipsContract>;
|
|
428
444
|
$computedDefinitions: Map<string, import("@adonisjs/lucid/types/model").ComputedOptions>;
|
|
429
445
|
primaryKey: string;
|
|
430
|
-
table: string;
|
|
431
446
|
selfAssignPrimaryKey: boolean;
|
|
432
447
|
$adapter: import("@adonisjs/lucid/types/model").AdapterContract;
|
|
433
448
|
useAdapter: (adapter: import("@adonisjs/lucid/types/model").AdapterContract) => void;
|
|
@@ -439,31 +454,29 @@ export declare function permissionQueryHelpers(): <Model extends NormalizeConstr
|
|
|
439
454
|
columnsToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
440
455
|
serializedToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
441
456
|
serializedToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
457
|
+
columnAliasesToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
442
458
|
};
|
|
443
459
|
$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
460
|
$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
461
|
$addColumn: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ColumnOptions>) => import("@adonisjs/lucid/types/model").ColumnOptions;
|
|
446
462
|
$hasColumn: (name: string) => boolean;
|
|
447
463
|
$getColumn: (name: string) => import("@adonisjs/lucid/types/model").ModelColumnOptions | undefined;
|
|
464
|
+
$getColumnAlias: (columnName: string) => string;
|
|
465
|
+
columnsForSelect: () => Record<string, string>;
|
|
448
466
|
$addComputed: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ComputedOptions>) => import("@adonisjs/lucid/types/model").ComputedOptions;
|
|
449
467
|
$hasComputed: (name: string) => boolean;
|
|
450
468
|
$getComputed: (name: string) => import("@adonisjs/lucid/types/model").ComputedOptions | undefined;
|
|
451
469
|
$addRelation: (name: string, type: import("@adonisjs/lucid/types/relations").ModelRelationTypes["__opaque_type"], relatedModel: () => LucidModel, options: import("@adonisjs/lucid/types/model").ModelRelationOptions) => void;
|
|
452
470
|
$hasRelation: (name: string) => boolean;
|
|
453
471
|
$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;
|
|
472
|
+
<Model_1 extends LucidModel, Name_2 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<InstanceType<Model_1>>>(this: Model_1, name: Name_2): NonNullable<InstanceType<Model_1>[Name_2]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? NonNullable<InstanceType<Model_1>[Name_2]>["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract;
|
|
455
473
|
<Model_1 extends LucidModel>(this: Model_1, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
|
|
456
474
|
};
|
|
457
475
|
$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
476
|
boot: () => void;
|
|
459
477
|
before: {
|
|
460
|
-
<Model_1 extends LucidModel,
|
|
478
|
+
<Model_1 extends LucidModel, Event_1 extends "find" | "fetch">(this: Model_1, event: Event_1, handler: import("@adonisjs/lucid/types/model").HooksHandler<ModelQueryBuilderContract<Model_1>, Event_1>): void;
|
|
461
479
|
<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
480
|
<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
481
|
};
|
|
469
482
|
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>>;
|
|
@@ -492,7 +505,4 @@ export declare function permissionQueryHelpers(): <Model extends NormalizeConstr
|
|
|
492
505
|
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
506
|
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
507
|
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>;
|
|
496
|
-
transaction: import("@adonisjs/lucid/types/database").TransactionFn;
|
|
497
|
-
truncate: (cascade?: boolean) => Promise<void>;
|
|
498
508
|
} & Model;
|
|
@@ -204,6 +204,14 @@ export function hasPermissions() {
|
|
|
204
204
|
canAny(permissions, target) {
|
|
205
205
|
return Acl.model(this).canAny(permissions, target);
|
|
206
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Check if a model has permission on any instance of a model class
|
|
209
|
+
* @param permission
|
|
210
|
+
* @param targetClass
|
|
211
|
+
*/
|
|
212
|
+
canPartially(permission, targetClass) {
|
|
213
|
+
return Acl.model(this).canPartially(permission, targetClass);
|
|
214
|
+
}
|
|
207
215
|
/**
|
|
208
216
|
* Check if model has any permission
|
|
209
217
|
* @param permission
|
|
@@ -22,3 +22,8 @@ export declare function destructTarget(map: MorphInterface, target?: AclModel |
|
|
|
22
22
|
targetId: ModelIdType | null;
|
|
23
23
|
};
|
|
24
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;
|
|
25
|
+
/**
|
|
26
|
+
* Apply target restriction for partial permission checks
|
|
27
|
+
* This function doesn't check entity_id when only entityType is provided
|
|
28
|
+
*/
|
|
29
|
+
export declare function applyPartialTargetRestriction(table: string, q: ManyToManySubQueryBuilderContract<typeof Permission> | ModelQueryBuilderContract<typeof Permission, PermissionInterface> | RelationSubQueryBuilderContract<typeof ModelRole>, entityType: string): void;
|
|
@@ -80,3 +80,10 @@ export function applyTargetRestriction(table, q, entityType, entityId) {
|
|
|
80
80
|
q.where(table + '.entity_type', '*').whereNull(table + '.entity_id');
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Apply target restriction for partial permission checks
|
|
85
|
+
* This function doesn't check entity_id when only entityType is provided
|
|
86
|
+
*/
|
|
87
|
+
export function applyPartialTargetRestriction(table, q, entityType) {
|
|
88
|
+
q.where(table + '.entity_type', entityType).whereNotNull(table + '.entity_id');
|
|
89
|
+
}
|
|
@@ -15,7 +15,7 @@ export declare class ModelHasRolePermissions extends BaseAdapter {
|
|
|
15
15
|
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface, scope: Scope, model: AclModel, emitter: Emitter<any>);
|
|
16
16
|
get roleService(): RolesService;
|
|
17
17
|
get permissionService(): PermissionService;
|
|
18
|
-
roles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<typeof import("../../models/role.
|
|
18
|
+
roles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<typeof import("../../models/role.ts").default, import("../../models/role.ts").default>;
|
|
19
19
|
hasRole(role: string): Promise<boolean>;
|
|
20
20
|
hasAllRoles(...roles: string[]): Promise<boolean>;
|
|
21
21
|
hasAnyRole(...roles: string[]): Promise<boolean>;
|
|
@@ -59,24 +59,24 @@ export declare class ModelHasRolePermissions extends BaseAdapter {
|
|
|
59
59
|
* @param roles
|
|
60
60
|
*/
|
|
61
61
|
syncRolesWithoutDetaching(roles: string[]): Promise<void>;
|
|
62
|
-
permissions(includeForbiddings?: boolean): Promise<import("../../models/permission.
|
|
62
|
+
permissions(includeForbiddings?: boolean): Promise<import("../../models/permission.ts").default[]>;
|
|
63
63
|
/**
|
|
64
64
|
* returns list of global permissions assigned to the model
|
|
65
65
|
* @param includeForbiddings
|
|
66
66
|
*/
|
|
67
|
-
globalPermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.
|
|
67
|
+
globalPermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.ts").default[]>;
|
|
68
68
|
/**
|
|
69
69
|
* @param includeForbiddings
|
|
70
70
|
*/
|
|
71
|
-
onResourcePermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.
|
|
72
|
-
directPermissions(includeForbiddings?: boolean): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<typeof import("../../models/permission.
|
|
71
|
+
onResourcePermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.ts").default[]>;
|
|
72
|
+
directPermissions(includeForbiddings?: boolean): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<typeof import("../../models/permission.ts").default, import("../../models/permission.ts").default>;
|
|
73
73
|
/**
|
|
74
74
|
* Get permission through roles
|
|
75
75
|
* @param includeForbiddings
|
|
76
76
|
*/
|
|
77
|
-
rolePermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.
|
|
78
|
-
directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.
|
|
79
|
-
directResourcePermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.
|
|
77
|
+
rolePermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.ts").default[]>;
|
|
78
|
+
directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.ts").default[]>;
|
|
79
|
+
directResourcePermissions(includeForbiddings?: boolean): Promise<import("../../models/permission.ts").default[]>;
|
|
80
80
|
containsPermission(permission: string): Promise<boolean>;
|
|
81
81
|
contains(permission: string): Promise<boolean>;
|
|
82
82
|
containsAllPermissions(permissions: string[]): Promise<boolean>;
|
|
@@ -102,32 +102,50 @@ export declare class ModelHasRolePermissions extends BaseAdapter {
|
|
|
102
102
|
can(permission: string, target?: AclModel | Function): Promise<boolean>;
|
|
103
103
|
canAll(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
104
104
|
canAny(permissions: string[], target?: AclModel | Function): Promise<boolean>;
|
|
105
|
+
/**
|
|
106
|
+
* Check if model has permission on any instance of a model class
|
|
107
|
+
* @param permission
|
|
108
|
+
* @param targetClass
|
|
109
|
+
*/
|
|
110
|
+
hasPartialPermission(permission: string, targetClass: Function): Promise<boolean>;
|
|
111
|
+
/**
|
|
112
|
+
* Check if model has any of the permissions on any instance of a model class
|
|
113
|
+
* @param permissions
|
|
114
|
+
* @param targetClass
|
|
115
|
+
*/
|
|
116
|
+
hasAnyPartialPermission(permissions: string[], targetClass: Function): Promise<boolean>;
|
|
117
|
+
/**
|
|
118
|
+
* Check if a model has permission on any instance of a model class
|
|
119
|
+
* @param permission
|
|
120
|
+
* @param targetClass
|
|
121
|
+
*/
|
|
122
|
+
canPartially(permission: string, targetClass: Function): Promise<boolean>;
|
|
105
123
|
/**
|
|
106
124
|
* calls assignDirectAllPermissions()
|
|
107
125
|
* @param permission
|
|
108
126
|
* @param target
|
|
109
127
|
*/
|
|
110
|
-
assignDirectPermission(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
128
|
+
assignDirectPermission(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
111
129
|
/**
|
|
112
130
|
*
|
|
113
131
|
* @param permissions
|
|
114
132
|
* @param target
|
|
115
133
|
*/
|
|
116
|
-
assignDirectAllPermissions(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
134
|
+
assignDirectAllPermissions(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
117
135
|
/**
|
|
118
136
|
* Assign permission to the model
|
|
119
137
|
* calls assignDirectAllPermissions
|
|
120
138
|
* @param permission
|
|
121
139
|
* @param target
|
|
122
140
|
*/
|
|
123
|
-
allow(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
141
|
+
allow(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
124
142
|
/**
|
|
125
143
|
* Assign list of permissions to the model
|
|
126
144
|
* calls assignDirectAllPermissions
|
|
127
145
|
* @param permission
|
|
128
146
|
* @param target
|
|
129
147
|
*/
|
|
130
|
-
allowAll(permission: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
148
|
+
allowAll(permission: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
131
149
|
/**
|
|
132
150
|
* Revoke permission from the model
|
|
133
151
|
* calls revokeAllPermissions
|
|
@@ -159,7 +177,7 @@ export declare class ModelHasRolePermissions extends BaseAdapter {
|
|
|
159
177
|
* @param permissions
|
|
160
178
|
* @param target
|
|
161
179
|
*/
|
|
162
|
-
syncPermissions(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
180
|
+
syncPermissions(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
163
181
|
flush(): Promise<boolean>;
|
|
164
182
|
/**
|
|
165
183
|
* calls forbidAll
|
|
@@ -213,6 +213,31 @@ export class ModelHasRolePermissions extends BaseAdapter {
|
|
|
213
213
|
canAny(permissions, target) {
|
|
214
214
|
return this.hasAnyPermission(permissions, target);
|
|
215
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Check if model has permission on any instance of a model class
|
|
218
|
+
* @param permission
|
|
219
|
+
* @param targetClass
|
|
220
|
+
*/
|
|
221
|
+
async hasPartialPermission(permission, targetClass) {
|
|
222
|
+
return this.hasAnyPartialPermission([permission], targetClass);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Check if model has any of the permissions on any instance of a model class
|
|
226
|
+
* @param permissions
|
|
227
|
+
* @param targetClass
|
|
228
|
+
*/
|
|
229
|
+
async hasAnyPartialPermission(permissions, targetClass) {
|
|
230
|
+
const entityType = this.map.getAlias(targetClass);
|
|
231
|
+
return await this.permissionService.hasAnyPartial(this.map.getAlias(this.model), this.model.getModelId(), permissions, entityType);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Check if a model has permission on any instance of a model class
|
|
235
|
+
* @param permission
|
|
236
|
+
* @param targetClass
|
|
237
|
+
*/
|
|
238
|
+
canPartially(permission, targetClass) {
|
|
239
|
+
return this.hasPartialPermission(permission, targetClass);
|
|
240
|
+
}
|
|
216
241
|
/**
|
|
217
242
|
* calls assignDirectAllPermissions()
|
|
218
243
|
* @param permission
|
|
@@ -12,6 +12,6 @@ export default class EmptyPermission extends BaseAdapter {
|
|
|
12
12
|
permissionClassName: ModelManagerBindings['permission'];
|
|
13
13
|
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface, scope: Scope, emitter: Emitter<any>);
|
|
14
14
|
get permissionQuery(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
15
|
-
create(values: Partial<PermissionInterface>): Promise<PermissionModel<typeof import("../../models/permission.
|
|
15
|
+
create(values: Partial<PermissionInterface>): Promise<PermissionModel<typeof import("../../models/permission.ts").default>>;
|
|
16
16
|
delete(permission: string): Promise<boolean>;
|
|
17
17
|
}
|
|
@@ -23,13 +23,13 @@ export default class PermissionHasModelRoles extends BaseAdapter {
|
|
|
23
23
|
get modelService(): ModelService;
|
|
24
24
|
models(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").ModelPermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
25
25
|
modelsFor(modelType: string): Promise<any>;
|
|
26
|
-
roles(): Promise<import("../../models/role.
|
|
26
|
+
roles(): Promise<import("../../models/role.ts").default[]>;
|
|
27
27
|
belongsToRole(role: string | number): Promise<boolean>;
|
|
28
28
|
/**
|
|
29
29
|
* @param role
|
|
30
30
|
* @param target
|
|
31
31
|
*/
|
|
32
|
-
attachToRole(role: string, target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
32
|
+
attachToRole(role: string, target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
33
33
|
/**
|
|
34
34
|
* @param role
|
|
35
35
|
*/
|
|
@@ -57,6 +57,10 @@ export default class PermissionsService extends BaseService {
|
|
|
57
57
|
* has any of permissions
|
|
58
58
|
*/
|
|
59
59
|
hasAny(modelType: string, modelId: ModelIdType, permission: string[], entityType: string | null, entityId: ModelIdType | null): Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* has any of permissions on any instance of a model class
|
|
62
|
+
*/
|
|
63
|
+
hasAnyPartial(modelType: string, modelId: ModelIdType, permissions: string[], entityType: string): Promise<boolean>;
|
|
60
64
|
/**
|
|
61
65
|
* has all permissions
|
|
62
66
|
*/
|
|
@@ -80,21 +84,21 @@ export default class PermissionsService extends BaseService {
|
|
|
80
84
|
/**
|
|
81
85
|
* give permission to model
|
|
82
86
|
*/
|
|
83
|
-
giveAll(modelType: string, modelId: ModelIdType, slugs: string[], entityType: string | null, entityId: ModelIdType | null, allowed: boolean): Promise<import("../../models/model_permission.
|
|
84
|
-
revokeAll(modelType: string, modelId: ModelIdType, permissions: string[], entityType: string | null, entityId: ModelIdType | null): ModelQueryBuilderContract<typeof import("../../models/model_permission.
|
|
85
|
-
flush(modelType: string, modelId: ModelIdType): ModelQueryBuilderContract<typeof import("../../models/model_permission.
|
|
87
|
+
giveAll(modelType: string, modelId: ModelIdType, slugs: string[], entityType: string | null, entityId: ModelIdType | null, allowed: boolean): Promise<import("../../models/model_permission.ts").default[]>;
|
|
88
|
+
revokeAll(modelType: string, modelId: ModelIdType, permissions: string[], entityType: string | null, entityId: ModelIdType | null): ModelQueryBuilderContract<typeof import("../../models/model_permission.ts").default, any>;
|
|
89
|
+
flush(modelType: string, modelId: ModelIdType): ModelQueryBuilderContract<typeof import("../../models/model_permission.ts").default, any>;
|
|
86
90
|
/**
|
|
87
91
|
* sync permissions, remove everything outside of the list
|
|
88
92
|
*/
|
|
89
|
-
sync(modelType: string, modelId: ModelIdType, permissionId: string[]): Promise<import("../../models/model_permission.
|
|
93
|
+
sync(modelType: string, modelId: ModelIdType, permissionId: string[]): Promise<import("../../models/model_permission.ts").default[]>;
|
|
90
94
|
/**
|
|
91
95
|
* forbid permission on model
|
|
92
96
|
*/
|
|
93
|
-
forbid(modelType: string, modelId: ModelIdType, permissionSlug: string, entityType: string | null, entityId: ModelIdType | null): Promise<import("../../models/model_permission.
|
|
97
|
+
forbid(modelType: string, modelId: ModelIdType, permissionSlug: string, entityType: string | null, entityId: ModelIdType | null): Promise<import("../../models/model_permission.ts").default[]>;
|
|
94
98
|
/**
|
|
95
99
|
* forbid permission on model
|
|
96
100
|
*/
|
|
97
|
-
forbidAll(modelType: string, modelId: ModelIdType, permissionsSlug: string[], entityType: string | null, entityId: ModelIdType | null): Promise<import("../../models/model_permission.
|
|
101
|
+
forbidAll(modelType: string, modelId: ModelIdType, permissionsSlug: string[], entityType: string | null, entityId: ModelIdType | null): Promise<import("../../models/model_permission.ts").default[]>;
|
|
98
102
|
/**
|
|
99
103
|
* to remove forbidden permission on model
|
|
100
104
|
*/
|
|
@@ -106,9 +110,10 @@ export default class PermissionsService extends BaseService {
|
|
|
106
110
|
* @deprecated
|
|
107
111
|
* @param conditions
|
|
108
112
|
*/
|
|
109
|
-
reverseModelPermissionQuery(conditions: Partial<ModelPermissionsQuery>): ModelQueryBuilderContract<typeof import("../../models/model_permission.
|
|
113
|
+
reverseModelPermissionQuery(conditions: Partial<ModelPermissionsQuery>): ModelQueryBuilderContract<typeof import("../../models/model_permission.ts").default, import("../../models/model_permission.ts").default>;
|
|
110
114
|
findAssignableEntity(permission: string[], entityClass: string | null, entityId: ModelIdType | null, allowed: boolean): ModelQueryBuilderContract<typeof Permission, Permission>;
|
|
111
115
|
private applyTargetRestriction;
|
|
116
|
+
private applyPartialTargetRestriction;
|
|
112
117
|
private applyScopes;
|
|
113
118
|
private applyModelPermissionScopes;
|
|
114
119
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import BaseService from '../base_service.js';
|
|
2
|
-
import { applyTargetRestriction } from '../helper.js';
|
|
2
|
+
import { applyTargetRestriction, applyPartialTargetRestriction } from '../helper.js';
|
|
3
3
|
export default class PermissionsService extends BaseService {
|
|
4
4
|
options;
|
|
5
5
|
scope;
|
|
@@ -204,6 +204,27 @@ export default class PermissionsService extends BaseService {
|
|
|
204
204
|
const r = await q.distinct(this.permissionTable + '.id').select(this.permissionTable + '.id');
|
|
205
205
|
return r.length > 0;
|
|
206
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* has any of permissions on any instance of a model class
|
|
209
|
+
*/
|
|
210
|
+
async hasAnyPartial(modelType, modelId, permissions, entityType) {
|
|
211
|
+
const { slugs, ids } = this.formatList(permissions);
|
|
212
|
+
const q = this.modelPermissionQueryWithForbiddenCheck({
|
|
213
|
+
modelType,
|
|
214
|
+
modelId,
|
|
215
|
+
directPermissions: this.map.getAlias(this.roleClassName) === modelType,
|
|
216
|
+
permissionSlugs: slugs,
|
|
217
|
+
permissionIds: ids,
|
|
218
|
+
entity: {
|
|
219
|
+
type: entityType,
|
|
220
|
+
id: null,
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
// We use applyPartialTargetRestriction which doesn't check entity_id when only entityType is provided
|
|
224
|
+
this.applyPartialTargetRestriction(this.permissionTable, q, entityType);
|
|
225
|
+
const r = await q.distinct(this.permissionTable + '.id').select(this.permissionTable + '.id');
|
|
226
|
+
return r.length > 0;
|
|
227
|
+
}
|
|
207
228
|
/**
|
|
208
229
|
* has all permissions
|
|
209
230
|
*/
|
|
@@ -496,6 +517,9 @@ export default class PermissionsService extends BaseService {
|
|
|
496
517
|
applyTargetRestriction(table, q, entityType, entityId) {
|
|
497
518
|
applyTargetRestriction(table, q, entityType, entityId);
|
|
498
519
|
}
|
|
520
|
+
applyPartialTargetRestriction(table, q, entityType) {
|
|
521
|
+
applyPartialTargetRestriction(table, q, entityType);
|
|
522
|
+
}
|
|
499
523
|
applyScopes(q) {
|
|
500
524
|
q.where(this.permissionTable + '.scope', this.scope.get());
|
|
501
525
|
}
|
|
@@ -13,6 +13,6 @@ export default class EmptyRoles extends BaseAdapter {
|
|
|
13
13
|
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface, scope: Scope, emitter: Emitter<any>);
|
|
14
14
|
get roleQuery(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
15
15
|
delete(role: string): Promise<any[]>;
|
|
16
|
-
create(values: Partial<RoleInterface>): Promise<import("../../models/role.
|
|
16
|
+
create(values: Partial<RoleInterface>): Promise<import("../../models/role.ts").default>;
|
|
17
17
|
query(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
18
18
|
}
|
|
@@ -17,9 +17,9 @@ export declare class RoleHasModelPermissions extends BaseAdapter {
|
|
|
17
17
|
get permissionService(): PermissionService;
|
|
18
18
|
models(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").ModelRoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
19
19
|
modelsFor(modelType: string): Promise<any>;
|
|
20
|
-
permissions(): Promise<import("../../models/permission.
|
|
21
|
-
globalPermissions(): Promise<import("../../models/permission.
|
|
22
|
-
onResourcePermissions(): Promise<import("../../models/permission.
|
|
20
|
+
permissions(): Promise<import("../../models/permission.ts").default[]>;
|
|
21
|
+
globalPermissions(): Promise<import("../../models/permission.ts").default[]>;
|
|
22
|
+
onResourcePermissions(): Promise<import("../../models/permission.ts").default[]>;
|
|
23
23
|
containsPermission(permission: string): Promise<boolean>;
|
|
24
24
|
/**
|
|
25
25
|
*
|
|
@@ -62,36 +62,36 @@ export declare class RoleHasModelPermissions extends BaseAdapter {
|
|
|
62
62
|
* @param permission
|
|
63
63
|
* @param target
|
|
64
64
|
*/
|
|
65
|
-
assign(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
65
|
+
assign(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
66
66
|
/**
|
|
67
67
|
* calls giveAll()
|
|
68
68
|
* @param permission
|
|
69
69
|
* @param target
|
|
70
70
|
*/
|
|
71
|
-
allow(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
71
|
+
allow(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
72
72
|
/**
|
|
73
73
|
* calls giveAll()
|
|
74
74
|
* @param permission
|
|
75
75
|
* @param target
|
|
76
76
|
*/
|
|
77
|
-
give(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
77
|
+
give(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
78
78
|
/**
|
|
79
79
|
* @param permissions
|
|
80
80
|
* @param target
|
|
81
81
|
*/
|
|
82
|
-
giveAll(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
82
|
+
giveAll(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
83
83
|
/**
|
|
84
84
|
* calls giveAll()
|
|
85
85
|
* @param permissions
|
|
86
86
|
* @param target
|
|
87
87
|
*/
|
|
88
|
-
assignAll(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
88
|
+
assignAll(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
89
89
|
/**
|
|
90
90
|
* calls giveAll()
|
|
91
91
|
* @param permissions
|
|
92
92
|
* @param target
|
|
93
93
|
*/
|
|
94
|
-
allowAll(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
94
|
+
allowAll(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
95
95
|
/**
|
|
96
96
|
* calls revokeAll()
|
|
97
97
|
* @param permission
|
|
@@ -114,7 +114,7 @@ export declare class RoleHasModelPermissions extends BaseAdapter {
|
|
|
114
114
|
* @param permissions - list of permissions
|
|
115
115
|
* @param target
|
|
116
116
|
*/
|
|
117
|
-
sync(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
118
|
-
forbid(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.
|
|
117
|
+
sync(permissions: string[], target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
118
|
+
forbid(permission: string, target?: AclModel | Function): Promise<import("../../models/model_permission.ts").default[]>;
|
|
119
119
|
unforbid(permission: string, target?: AclModel | Function): Promise<any[]>;
|
|
120
120
|
}
|