@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 +62 -2
- package/build/index.d.ts +1 -1
- package/build/index.js +1 -1
- package/build/src/mixins/has_permissions.d.ts +198 -48
- package/build/src/mixins/has_permissions.js +111 -0
- package/build/src/services/helper.d.ts +8 -4
- package/build/src/services/helper.js +19 -1
- package/build/src/services/models/model_has_role_permissions.js +8 -8
- package/build/src/services/permissions/permission_has_model_roles.js +1 -1
- package/build/src/services/permissions/permissions_service.js +9 -19
- package/build/src/services/roles/role_has_model_permissions.js +8 -8
- package/build/src/types.d.ts +0 -3
- 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.
|
|
18
|
-
* Added [
|
|
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():
|
|
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<
|
|
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<
|
|
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<
|
|
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]:
|
|
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):
|
|
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<
|
|
240
|
-
$pushRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<
|
|
241
|
-
$getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<
|
|
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<
|
|
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<
|
|
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]:
|
|
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<
|
|
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
|
|
272
|
-
all: <T extends
|
|
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
|
|
294
|
-
$createMultipleFromAdapterResult: <T extends
|
|
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: () =>
|
|
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
|
|
305
|
-
<Model_1 extends
|
|
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
|
|
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
|
|
311
|
-
<Model_1 extends
|
|
312
|
-
<Model_1 extends
|
|
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
|
|
316
|
-
<Model_1 extends
|
|
317
|
-
<Model_1 extends
|
|
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
|
|
320
|
-
createQuietly: <T extends
|
|
321
|
-
createMany: <T extends
|
|
322
|
-
createManyQuietly: <T extends
|
|
323
|
-
findOrFail: <T extends
|
|
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
|
|
326
|
-
<T extends
|
|
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
|
|
330
|
-
<T extends
|
|
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
|
|
334
|
-
<T extends
|
|
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
|
|
337
|
-
firstOrFail: <T extends
|
|
338
|
-
findMany: <T extends
|
|
339
|
-
firstOrNew: <T extends
|
|
340
|
-
firstOrCreate: <T extends
|
|
341
|
-
updateOrCreate: <T extends
|
|
342
|
-
fetchOrNewUpMany: <T extends
|
|
343
|
-
fetchOrCreateMany: <T extends
|
|
344
|
-
updateOrCreateMany: <T extends
|
|
345
|
-
query: <Model_1 extends
|
|
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):
|
|
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:
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
}
|
package/build/src/types.d.ts
CHANGED
|
@@ -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;
|