@holoyan/adonisjs-permissions 0.7.15 → 0.8.17
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 +19 -0
- package/build/src/acl.d.ts +15 -5
- package/build/src/acl.js +40 -29
- package/build/src/scope.d.ts +1 -1
- package/build/src/scope.js +1 -1
- package/build/src/services/base_adapter.d.ts +13 -0
- package/build/src/services/base_adapter.js +24 -0
- package/build/src/services/base_service.d.ts +5 -0
- package/build/src/services/base_service.js +10 -0
- package/build/src/services/model_has_role_permissions.d.ts +15 -10
- package/build/src/services/model_has_role_permissions.js +46 -40
- package/build/src/services/model_service.d.ts +3 -2
- package/build/src/services/model_service.js +6 -15
- package/build/src/services/permissions/empty_permission.d.ts +9 -7
- package/build/src/services/permissions/empty_permission.js +12 -13
- package/build/src/services/permissions/permission_has_model_roles.d.ts +16 -13
- package/build/src/services/permissions/permission_has_model_roles.js +24 -14
- package/build/src/services/permissions/permissions_service.d.ts +9 -9
- package/build/src/services/permissions/permissions_service.js +13 -20
- package/build/src/services/query_helper.d.ts +5 -5
- package/build/src/services/query_helper.js +8 -8
- package/build/src/services/roles/empty_roles.d.ts +9 -7
- package/build/src/services/roles/empty_roles.js +12 -13
- package/build/src/services/roles/role_has_model_permissions.d.ts +11 -10
- package/build/src/services/roles/role_has_model_permissions.js +19 -16
- package/build/src/services/roles/roles_service.d.ts +9 -10
- package/build/src/services/roles/roles_service.js +15 -23
- package/build/src/types.d.ts +4 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
- [Scopes or Multi-tenancy](#scopes-or-multi-tenancy)
|
|
42
42
|
- [The Scope middleware](#the-scope-middleware)
|
|
43
43
|
- [Default Scope](#default-scope-tenant)
|
|
44
|
+
- [Transactions](#transactions)
|
|
44
45
|
- [Cheat sheet](#cheat-sheet)
|
|
45
46
|
- [Todo](#todo)
|
|
46
47
|
- [Test](#test)
|
|
@@ -964,6 +965,24 @@ Acl.scope('scope_2', forceUpdate) // will override request 1 scope
|
|
|
964
965
|
|
|
965
966
|
> Default Scope value is equal to 'default'
|
|
966
967
|
|
|
968
|
+
### Transactions
|
|
969
|
+
|
|
970
|
+
In case you want to use `Acl` inside the transaction then you can pass `options` directly to query method.
|
|
971
|
+
|
|
972
|
+
```typescript
|
|
973
|
+
|
|
974
|
+
import {Acl} from '@holoyan/adonisjs-permissions'
|
|
975
|
+
|
|
976
|
+
const trx = await db.transaction()
|
|
977
|
+
|
|
978
|
+
await Acl.model(user).withQueryOptions({ client: trx }).allow('delete')
|
|
979
|
+
|
|
980
|
+
// you other code
|
|
981
|
+
|
|
982
|
+
await trx.commit()
|
|
983
|
+
|
|
984
|
+
```
|
|
985
|
+
|
|
967
986
|
|
|
968
987
|
## Cheat sheet
|
|
969
988
|
|
package/build/src/acl.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RoleHasModelPermissions } from './services/roles/role_has_model_permissions.js';
|
|
2
2
|
import { ModelHasRolePermissions } from './services/model_has_role_permissions.js';
|
|
3
|
-
import { AclModel, MorphInterface, PermissionInterface, RoleInterface, ScopeInterface } from './types.js';
|
|
3
|
+
import { AclModel, MorphInterface, OptionsInterface, PermissionInterface, RoleInterface, ScopeInterface } from './types.js';
|
|
4
4
|
import ModelManager from './model_manager.js';
|
|
5
5
|
import EmptyPermission from './services/permissions/empty_permission.js';
|
|
6
6
|
import EmptyRoles from './services/roles/empty_roles.js';
|
|
@@ -9,16 +9,26 @@ export declare class AclManager {
|
|
|
9
9
|
private static map;
|
|
10
10
|
static setModelManager(manager: ModelManager): void;
|
|
11
11
|
static setMorphMap(map: MorphInterface): void;
|
|
12
|
-
private
|
|
13
|
-
private
|
|
14
|
-
constructor(
|
|
12
|
+
private allowOptionsRewriting;
|
|
13
|
+
private options;
|
|
14
|
+
constructor(allowOptionsRewriting: boolean, defaultOptions?: OptionsInterface);
|
|
15
15
|
model(model: AclModel): ModelHasRolePermissions;
|
|
16
16
|
role(): EmptyRoles;
|
|
17
17
|
role(role: RoleInterface): RoleHasModelPermissions;
|
|
18
18
|
permission(): EmptyPermission;
|
|
19
19
|
permission(permission: PermissionInterface): EmptyPermission;
|
|
20
20
|
private createNewScope;
|
|
21
|
+
/**
|
|
22
|
+
* changing global options
|
|
23
|
+
* @param options
|
|
24
|
+
* @param forceUpdate
|
|
25
|
+
*/
|
|
26
|
+
withOptions(options: OptionsInterface, forceUpdate?: boolean): this;
|
|
27
|
+
/**
|
|
28
|
+
* @param scope
|
|
29
|
+
* @param forceUpdate
|
|
30
|
+
*/
|
|
21
31
|
scope(scope: ScopeInterface, forceUpdate?: boolean): this;
|
|
22
|
-
getScope():
|
|
32
|
+
getScope(): any;
|
|
23
33
|
}
|
|
24
34
|
export declare const Acl: AclManager;
|
package/build/src/acl.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { RoleHasModelPermissions } from './services/roles/role_has_model_permissions.js';
|
|
2
2
|
import { ModelHasRolePermissions } from './services/model_has_role_permissions.js';
|
|
3
|
-
import PermissionsService from './services/permissions/permissions_service.js';
|
|
4
|
-
import RolesService from './services/roles/roles_service.js';
|
|
5
3
|
import PermissionHasModelRoles from './services/permissions/permission_has_model_roles.js';
|
|
6
|
-
import
|
|
4
|
+
import ModelManager from './model_manager.js';
|
|
7
5
|
import EmptyPermission from './services/permissions/empty_permission.js';
|
|
8
6
|
import EmptyRoles from './services/roles/empty_roles.js';
|
|
7
|
+
import { Scope } from './scope.js';
|
|
9
8
|
export class AclManager {
|
|
10
9
|
static modelManager;
|
|
11
10
|
static map;
|
|
@@ -15,53 +14,65 @@ export class AclManager {
|
|
|
15
14
|
static setMorphMap(map) {
|
|
16
15
|
this.map = map;
|
|
17
16
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
constructor(
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
allowOptionsRewriting;
|
|
18
|
+
options = {};
|
|
19
|
+
constructor(allowOptionsRewriting, defaultOptions) {
|
|
20
|
+
this.allowOptionsRewriting = allowOptionsRewriting;
|
|
21
|
+
// default global scope
|
|
22
|
+
this.options['scope'] = this.createNewScope();
|
|
23
|
+
if (defaultOptions) {
|
|
24
|
+
this.options = { ...this.options, ...defaultOptions };
|
|
23
25
|
}
|
|
24
26
|
}
|
|
25
27
|
model(model) {
|
|
26
|
-
|
|
27
|
-
const role = AclManager.modelManager.getModel('role');
|
|
28
|
-
const modelPermission = AclManager.modelManager.getModel('modelPermission');
|
|
29
|
-
const modelRole = AclManager.modelManager.getModel('modelRole');
|
|
30
|
-
return new ModelHasRolePermissions(model, new RolesService(role, modelPermission, modelRole, AclManager.map, scope), new PermissionsService(AclManager.modelManager.getModel('permission'), role, modelPermission, modelRole, AclManager.map, scope), AclManager.map, scope);
|
|
28
|
+
return new ModelHasRolePermissions(AclManager.modelManager, AclManager.map, { ...this.options }, model);
|
|
31
29
|
}
|
|
32
30
|
role(role) {
|
|
33
|
-
const scope = this.getScope();
|
|
34
|
-
const roleClass = AclManager.modelManager.getModel('role');
|
|
35
|
-
const modelPermission = AclManager.modelManager.getModel('modelPermission');
|
|
36
|
-
const modelRole = AclManager.modelManager.getModel('modelRole');
|
|
37
31
|
if (role) {
|
|
38
|
-
return new RoleHasModelPermissions(
|
|
32
|
+
return new RoleHasModelPermissions(AclManager.modelManager, AclManager.map, { ...this.options }, role);
|
|
39
33
|
}
|
|
40
|
-
return new EmptyRoles(
|
|
34
|
+
return new EmptyRoles(AclManager.modelManager, AclManager.map, { ...this.options });
|
|
41
35
|
}
|
|
42
36
|
permission(permission) {
|
|
43
|
-
const scope = this.getScope();
|
|
44
|
-
const roleClass = AclManager.modelManager.getModel('role');
|
|
45
|
-
const modelPermission = AclManager.modelManager.getModel('modelPermission');
|
|
46
|
-
const modelRole = AclManager.modelManager.getModel('modelRole');
|
|
47
37
|
if (permission) {
|
|
48
|
-
return new PermissionHasModelRoles(
|
|
38
|
+
return new PermissionHasModelRoles(AclManager.modelManager, AclManager.map, { ...this.options }, permission);
|
|
49
39
|
}
|
|
50
|
-
return new EmptyPermission(AclManager.modelManager.
|
|
40
|
+
return new EmptyPermission(AclManager.modelManager, AclManager.map, { ...this.options });
|
|
51
41
|
}
|
|
52
42
|
createNewScope() {
|
|
53
43
|
const ScopeClass = AclManager.modelManager.getModel('scope');
|
|
54
|
-
return new ScopeClass();
|
|
44
|
+
return new ScopeClass().get();
|
|
55
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* changing global options
|
|
48
|
+
* @param options
|
|
49
|
+
* @param forceUpdate
|
|
50
|
+
*/
|
|
51
|
+
withOptions(options, forceUpdate = false) {
|
|
52
|
+
if (!this.allowOptionsRewriting && !forceUpdate) {
|
|
53
|
+
throw new Error('withOptions method call is not available on global Acl object, use AclManager to create new object or use forceUpdate=true');
|
|
54
|
+
}
|
|
55
|
+
this.options = { ...this.options, ...options };
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @param scope
|
|
60
|
+
* @param forceUpdate
|
|
61
|
+
*/
|
|
56
62
|
scope(scope, forceUpdate = false) {
|
|
57
|
-
if (!this.
|
|
63
|
+
if (!this.allowOptionsRewriting && !forceUpdate) {
|
|
58
64
|
throw new Error('Scope method call is not available on global Acl object, use AclManager to create new scoped object or use forceUpdate=true');
|
|
59
65
|
}
|
|
60
|
-
this.
|
|
66
|
+
this.withOptions({
|
|
67
|
+
scope,
|
|
68
|
+
}, forceUpdate);
|
|
61
69
|
return this;
|
|
62
70
|
}
|
|
63
71
|
getScope() {
|
|
64
|
-
return this.
|
|
72
|
+
return this.options['scope'];
|
|
65
73
|
}
|
|
66
74
|
}
|
|
75
|
+
const modelManager = new ModelManager();
|
|
76
|
+
modelManager.setModel('scope', Scope);
|
|
77
|
+
AclManager.setModelManager(modelManager);
|
|
67
78
|
export const Acl = new AclManager(false);
|
package/build/src/scope.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ScopeInterface } from './types.js';
|
|
2
2
|
export declare class Scope implements ScopeInterface {
|
|
3
3
|
private currentScope;
|
|
4
|
-
constructor(scope?: string);
|
|
5
4
|
static defaultScope: string;
|
|
5
|
+
constructor(scope?: string);
|
|
6
6
|
set(scope: string): this;
|
|
7
7
|
get(): string;
|
|
8
8
|
default(): string;
|
package/build/src/scope.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export class Scope {
|
|
2
2
|
currentScope;
|
|
3
|
+
static defaultScope = 'default';
|
|
3
4
|
constructor(scope) {
|
|
4
5
|
if (!scope) {
|
|
5
6
|
scope = Scope.defaultScope;
|
|
6
7
|
}
|
|
7
8
|
this.currentScope = scope;
|
|
8
9
|
}
|
|
9
|
-
static defaultScope = 'default';
|
|
10
10
|
set(scope) {
|
|
11
11
|
this.currentScope = scope;
|
|
12
12
|
return this;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ModelAdapterOptions } from '@adonisjs/lucid/types/model';
|
|
2
|
+
import ModelManager from '../model_manager.js';
|
|
3
|
+
import { MorphInterface, OptionsInterface } from '../types.js';
|
|
4
|
+
export default class BaseAdapter {
|
|
5
|
+
protected manager: ModelManager;
|
|
6
|
+
protected map: MorphInterface;
|
|
7
|
+
protected options: OptionsInterface;
|
|
8
|
+
protected get scope(): any;
|
|
9
|
+
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface);
|
|
10
|
+
on(scope: string): this;
|
|
11
|
+
getScope(): any;
|
|
12
|
+
withQueryOptions(options: ModelAdapterOptions): this;
|
|
13
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export default class BaseAdapter {
|
|
2
|
+
manager;
|
|
3
|
+
map;
|
|
4
|
+
options;
|
|
5
|
+
get scope() {
|
|
6
|
+
return this.options['scope'];
|
|
7
|
+
}
|
|
8
|
+
constructor(manager, map, options) {
|
|
9
|
+
this.manager = manager;
|
|
10
|
+
this.map = map;
|
|
11
|
+
this.options = options;
|
|
12
|
+
}
|
|
13
|
+
on(scope) {
|
|
14
|
+
this.options['scope'] = scope;
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
getScope() {
|
|
18
|
+
return this.scope;
|
|
19
|
+
}
|
|
20
|
+
withQueryOptions(options) {
|
|
21
|
+
this.options['queryOptions'] = options;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
import { OptionsInterface } from '../types.js';
|
|
1
2
|
export default class BaseService {
|
|
3
|
+
protected options: OptionsInterface;
|
|
4
|
+
constructor(options: OptionsInterface);
|
|
5
|
+
protected getQueryOptions(): any;
|
|
6
|
+
protected get scope(): any;
|
|
2
7
|
protected formatList(models: (string | number | any)[]): {
|
|
3
8
|
slugs: string[];
|
|
4
9
|
ids: number[];
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { formatList, formatListStringNumbers, formatStringNumbers } from './helper.js';
|
|
2
2
|
export default class BaseService {
|
|
3
|
+
options;
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.options = options;
|
|
6
|
+
}
|
|
7
|
+
getQueryOptions() {
|
|
8
|
+
return this.options['queryOptions'] || undefined;
|
|
9
|
+
}
|
|
10
|
+
get scope() {
|
|
11
|
+
return this.options['scope'];
|
|
12
|
+
}
|
|
3
13
|
formatList(models) {
|
|
4
14
|
return formatList(models);
|
|
5
15
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { AclModel, MorphInterface,
|
|
2
|
-
import PermissionsService from './permissions/permissions_service.js';
|
|
1
|
+
import { AclModel, MorphInterface, OptionsInterface } from '../types.js';
|
|
3
2
|
import RolesService from './roles/roles_service.js';
|
|
4
|
-
|
|
3
|
+
import BaseAdapter from './base_adapter.js';
|
|
4
|
+
import ModelManager from '../model_manager.js';
|
|
5
|
+
import PermissionService from './permissions/permissions_service.js';
|
|
6
|
+
export declare class ModelHasRolePermissions extends BaseAdapter {
|
|
7
|
+
protected manager: ModelManager;
|
|
8
|
+
protected map: MorphInterface;
|
|
9
|
+
protected options: OptionsInterface;
|
|
5
10
|
private model;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
private scope;
|
|
10
|
-
constructor(model: AclModel, roleService: RolesService, permissionsService: PermissionsService, map: MorphInterface, scope: ScopeInterface);
|
|
11
|
-
on(scope: string): this;
|
|
12
|
-
getScope(): string;
|
|
11
|
+
protected roleService: RolesService;
|
|
12
|
+
protected permissionService: PermissionService;
|
|
13
|
+
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface, model: AclModel);
|
|
13
14
|
roles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
14
15
|
hasRole(role: string): Promise<boolean>;
|
|
15
16
|
hasAllRoles(...roles: string[]): Promise<boolean>;
|
|
@@ -24,6 +25,10 @@ export declare class ModelHasRolePermissions {
|
|
|
24
25
|
globalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
25
26
|
onResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
26
27
|
directPermissions(includeForbiddings?: boolean): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
28
|
+
/**
|
|
29
|
+
* Get permission through roles
|
|
30
|
+
* @param includeForbiddings
|
|
31
|
+
*/
|
|
27
32
|
rolePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
28
33
|
directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
29
34
|
directResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
+
import RolesService from './roles/roles_service.js';
|
|
1
2
|
import { destructTarget, formatList } from './helper.js';
|
|
2
|
-
|
|
3
|
+
import BaseAdapter from './base_adapter.js';
|
|
4
|
+
import PermissionService from './permissions/permissions_service.js';
|
|
5
|
+
export class ModelHasRolePermissions extends BaseAdapter {
|
|
6
|
+
manager;
|
|
7
|
+
map;
|
|
8
|
+
options;
|
|
3
9
|
model;
|
|
4
10
|
roleService;
|
|
5
|
-
|
|
6
|
-
map
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
this.model = model;
|
|
10
|
-
this.roleService = roleService;
|
|
11
|
-
this.permissionsService = permissionsService;
|
|
11
|
+
permissionService;
|
|
12
|
+
constructor(manager, map, options, model) {
|
|
13
|
+
super(manager, map, options);
|
|
14
|
+
this.manager = manager;
|
|
12
15
|
this.map = map;
|
|
13
|
-
this.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return this.scope.get();
|
|
16
|
+
this.options = options;
|
|
17
|
+
this.model = model;
|
|
18
|
+
const role = manager.getModel('role');
|
|
19
|
+
const modelPermission = manager.getModel('modelPermission');
|
|
20
|
+
const modelRole = manager.getModel('modelRole');
|
|
21
|
+
this.roleService = new RolesService(this.options, role, modelPermission, modelRole, map);
|
|
22
|
+
this.permissionService = new PermissionService(this.options, manager.getModel('permission'), role, modelPermission, modelRole, map);
|
|
21
23
|
}
|
|
22
24
|
// roles related section BEGIN
|
|
23
25
|
roles() {
|
|
@@ -54,50 +56,54 @@ export class ModelHasRolePermissions {
|
|
|
54
56
|
// roles related section END
|
|
55
57
|
// permissions related section BEGIN
|
|
56
58
|
async permissions(includeForbiddings = false) {
|
|
57
|
-
return this.
|
|
59
|
+
return this.permissionService.all(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
|
|
58
60
|
}
|
|
59
61
|
async globalPermissions(includeForbiddings = false) {
|
|
60
|
-
return this.
|
|
62
|
+
return this.permissionService.global(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
|
|
61
63
|
}
|
|
62
64
|
async onResourcePermissions(includeForbiddings = false) {
|
|
63
|
-
return this.
|
|
65
|
+
return this.permissionService.onResource(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
|
|
64
66
|
}
|
|
65
67
|
directPermissions(includeForbiddings = false) {
|
|
66
|
-
return this.
|
|
68
|
+
return this.permissionService.direct(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
|
|
67
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Get permission through roles
|
|
72
|
+
* @param includeForbiddings
|
|
73
|
+
*/
|
|
68
74
|
rolePermissions(includeForbiddings = false) {
|
|
69
|
-
return this.
|
|
75
|
+
return this.permissionService.throughRoles(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
|
|
70
76
|
}
|
|
71
77
|
async directGlobalPermissions(includeForbiddings = false) {
|
|
72
|
-
return this.
|
|
78
|
+
return this.permissionService.directGlobal(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
|
|
73
79
|
}
|
|
74
80
|
async directResourcePermissions(includeForbiddings = false) {
|
|
75
|
-
return this.
|
|
81
|
+
return this.permissionService.directResource(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
|
|
76
82
|
}
|
|
77
83
|
async containsPermission(permission) {
|
|
78
|
-
const result = await this.
|
|
84
|
+
const result = await this.permissionService.containsAny(this.map.getAlias(this.model), this.model.getModelId(), [permission]);
|
|
79
85
|
return result;
|
|
80
86
|
}
|
|
81
87
|
async contains(permission) {
|
|
82
88
|
return this.containsPermission(permission);
|
|
83
89
|
}
|
|
84
90
|
async containsAllPermissions(permissions) {
|
|
85
|
-
const result = await this.
|
|
91
|
+
const result = await this.permissionService.containsAll(this.map.getAlias(this.model), this.model.getModelId(), permissions);
|
|
86
92
|
return result;
|
|
87
93
|
}
|
|
88
94
|
async containsAnyPermission(permissions) {
|
|
89
|
-
const result = await this.
|
|
95
|
+
const result = await this.permissionService.containsAny(this.map.getAlias(this.model), this.model.getModelId(), permissions);
|
|
90
96
|
return result;
|
|
91
97
|
}
|
|
92
98
|
async containsDirectPermission(permission) {
|
|
93
|
-
const result = await this.
|
|
99
|
+
const result = await this.permissionService.containsAnyDirect(this.map.getAlias(this.model), this.model.getModelId(), [permission]);
|
|
94
100
|
return result;
|
|
95
101
|
}
|
|
96
102
|
containsAllPermissionsDirectly(permissions) {
|
|
97
|
-
return this.
|
|
103
|
+
return this.permissionService.containsAllDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions);
|
|
98
104
|
}
|
|
99
105
|
async containsAnyPermissionDirectly(permissions) {
|
|
100
|
-
const result = await this.
|
|
106
|
+
const result = await this.permissionService.containsAnyDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions);
|
|
101
107
|
return result;
|
|
102
108
|
}
|
|
103
109
|
async hasPermission(permission, target) {
|
|
@@ -105,22 +111,22 @@ export class ModelHasRolePermissions {
|
|
|
105
111
|
}
|
|
106
112
|
async hasAllPermissions(permissions, target) {
|
|
107
113
|
const entity = await destructTarget(this.map, target);
|
|
108
|
-
return await this.
|
|
114
|
+
return await this.permissionService.hasAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
|
|
109
115
|
}
|
|
110
116
|
async hasAnyPermission(permissions, target) {
|
|
111
117
|
const entity = await destructTarget(this.map, target);
|
|
112
|
-
return await this.
|
|
118
|
+
return await this.permissionService.hasAny(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
|
|
113
119
|
}
|
|
114
120
|
async hasAnyDirectPermission(permissions, target) {
|
|
115
121
|
const entity = await destructTarget(this.map, target);
|
|
116
|
-
return await this.
|
|
122
|
+
return await this.permissionService.hasAnyDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
|
|
117
123
|
}
|
|
118
124
|
async hasDirectPermission(permission, target) {
|
|
119
125
|
return this.hasAnyDirectPermission([permission], target);
|
|
120
126
|
}
|
|
121
127
|
async hasAllPermissionsDirect(permissions, target) {
|
|
122
128
|
const entity = await destructTarget(this.map, target);
|
|
123
|
-
return await this.
|
|
129
|
+
return await this.permissionService.hasAllDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
|
|
124
130
|
}
|
|
125
131
|
can(permission, target) {
|
|
126
132
|
return this.hasPermission(permission, target);
|
|
@@ -133,11 +139,11 @@ export class ModelHasRolePermissions {
|
|
|
133
139
|
}
|
|
134
140
|
async assignDirectPermission(permission, target) {
|
|
135
141
|
const entity = await destructTarget(this.map, target);
|
|
136
|
-
return this.
|
|
142
|
+
return this.permissionService.giveAll(this.map.getAlias(this.model), this.model.getModelId(), [permission], entity.targetClass, entity.targetId, true);
|
|
137
143
|
}
|
|
138
144
|
async assignDirectAllPermissions(permissions, target) {
|
|
139
145
|
const entity = await destructTarget(this.map, target);
|
|
140
|
-
return this.
|
|
146
|
+
return this.permissionService.giveAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId, true);
|
|
141
147
|
}
|
|
142
148
|
allow(permission, target) {
|
|
143
149
|
return this.allowAll([permission], target);
|
|
@@ -156,13 +162,13 @@ export class ModelHasRolePermissions {
|
|
|
156
162
|
}
|
|
157
163
|
async revokeAllPermissions(permissions, target) {
|
|
158
164
|
const entity = await destructTarget(this.map, target);
|
|
159
|
-
return this.
|
|
165
|
+
return this.permissionService.revokeAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
|
|
160
166
|
}
|
|
161
167
|
async flushPermissions() {
|
|
162
|
-
return this.
|
|
168
|
+
return this.permissionService.flush(this.map.getAlias(this.model), this.model.getModelId());
|
|
163
169
|
}
|
|
164
170
|
async flush() {
|
|
165
|
-
await this.
|
|
171
|
+
await this.permissionService.flush(this.map.getAlias(this.model), this.model.getModelId());
|
|
166
172
|
await this.roleService.flush(this.map.getAlias(this.model), this.model.getModelId());
|
|
167
173
|
return true;
|
|
168
174
|
}
|
|
@@ -171,11 +177,11 @@ export class ModelHasRolePermissions {
|
|
|
171
177
|
}
|
|
172
178
|
async forbidAll(permissions, target) {
|
|
173
179
|
const entity = await destructTarget(this.map, target);
|
|
174
|
-
return this.
|
|
180
|
+
return this.permissionService.forbidAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
|
|
175
181
|
}
|
|
176
182
|
async unforbidAll(permissions, target) {
|
|
177
183
|
const entity = await destructTarget(this.map, target);
|
|
178
|
-
return this.
|
|
184
|
+
return this.permissionService.unforbidAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
|
|
179
185
|
}
|
|
180
186
|
async unforbid(permission, target) {
|
|
181
187
|
return this.unforbidAll([permission], target);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import BaseService from './base_service.js';
|
|
2
2
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
3
|
-
import { ModelIdType, MorphInterface } from '../types.js';
|
|
3
|
+
import { ModelIdType, MorphInterface, OptionsInterface } from '../types.js';
|
|
4
4
|
export default class ModelService extends BaseService {
|
|
5
|
+
protected options: OptionsInterface;
|
|
5
6
|
private modelPermissionClassName;
|
|
6
7
|
private modelRoleClassName;
|
|
7
8
|
private map;
|
|
@@ -9,7 +10,7 @@ export default class ModelService extends BaseService {
|
|
|
9
10
|
private readonly modelPermissionTable;
|
|
10
11
|
private modelRoleQuery;
|
|
11
12
|
private readonly modelRoleTable;
|
|
12
|
-
constructor(modelPermissionClassName: typeof BaseModel, modelRoleClassName: typeof BaseModel, map: MorphInterface);
|
|
13
|
+
constructor(options: OptionsInterface, modelPermissionClassName: typeof BaseModel, modelRoleClassName: typeof BaseModel, map: MorphInterface);
|
|
13
14
|
all(roleId: number): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../types.js").ModelRoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
14
15
|
allFor(modelType: string, roleId: number): Promise<any>;
|
|
15
16
|
allByPermission(permissionId: ModelIdType): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../types.js").ModelPermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
@@ -1,32 +1,23 @@
|
|
|
1
1
|
import BaseService from './base_service.js';
|
|
2
2
|
import { getModelPermissionModelQuery, getModelRoleModelQuery } from './query_helper.js';
|
|
3
3
|
export default class ModelService extends BaseService {
|
|
4
|
+
options;
|
|
4
5
|
modelPermissionClassName;
|
|
5
6
|
modelRoleClassName;
|
|
6
7
|
map;
|
|
7
|
-
// private permissionQuery
|
|
8
|
-
// private readonly permissionTable
|
|
9
|
-
// private roleQuery
|
|
10
|
-
// private readonly roleTable
|
|
11
8
|
modelPermissionQuery;
|
|
12
9
|
modelPermissionTable;
|
|
13
10
|
modelRoleQuery;
|
|
14
11
|
modelRoleTable;
|
|
15
|
-
constructor(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
modelPermissionClassName, modelRoleClassName, map) {
|
|
19
|
-
super();
|
|
12
|
+
constructor(options, modelPermissionClassName, modelRoleClassName, map) {
|
|
13
|
+
super(options);
|
|
14
|
+
this.options = options;
|
|
20
15
|
this.modelPermissionClassName = modelPermissionClassName;
|
|
21
16
|
this.modelRoleClassName = modelRoleClassName;
|
|
22
17
|
this.map = map;
|
|
23
|
-
|
|
24
|
-
// this.permissionTable = this.permissionClassName.table
|
|
25
|
-
// this.roleQuery = getRoleModelQuery(this.roleClassName)
|
|
26
|
-
// this.roleTable = this.roleClassName.table
|
|
27
|
-
this.modelPermissionQuery = getModelPermissionModelQuery(this.modelPermissionClassName);
|
|
18
|
+
this.modelPermissionQuery = getModelPermissionModelQuery(this.modelPermissionClassName, this.getQueryOptions());
|
|
28
19
|
this.modelPermissionTable = this.modelPermissionClassName.table;
|
|
29
|
-
this.modelRoleQuery = getModelRoleModelQuery(this.modelRoleClassName);
|
|
20
|
+
this.modelRoleQuery = getModelRoleModelQuery(this.modelRoleClassName, this.getQueryOptions());
|
|
30
21
|
this.modelRoleTable = this.modelRoleClassName.table;
|
|
31
22
|
}
|
|
32
23
|
all(roleId) {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
2
|
-
import { PermissionInterface, PermissionModel
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { MorphInterface, OptionsInterface, PermissionInterface, PermissionModel } from '../../types.js';
|
|
3
|
+
import BaseAdapter from '../base_adapter.js';
|
|
4
|
+
import ModelManager from '../../model_manager.js';
|
|
5
|
+
export default class EmptyPermission extends BaseAdapter {
|
|
6
|
+
protected manager: ModelManager;
|
|
7
|
+
protected map: MorphInterface;
|
|
8
|
+
protected options: OptionsInterface;
|
|
6
9
|
private permissionQuery;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
getScope(): string;
|
|
10
|
+
permissionClassName: typeof BaseModel;
|
|
11
|
+
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface);
|
|
10
12
|
delete(permission: string): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, any>;
|
|
11
13
|
create(values: Partial<PermissionInterface>): Promise<PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
12
14
|
query(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { getPermissionModelQuery } from '../query_helper.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import BaseAdapter from '../base_adapter.js';
|
|
3
|
+
export default class EmptyPermission extends BaseAdapter {
|
|
4
|
+
manager;
|
|
5
|
+
map;
|
|
6
|
+
options;
|
|
5
7
|
permissionQuery;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
permissionClassName;
|
|
9
|
+
constructor(manager, map, options) {
|
|
10
|
+
super(manager, map, options);
|
|
11
|
+
this.manager = manager;
|
|
12
|
+
this.map = map;
|
|
13
|
+
this.options = options;
|
|
14
|
+
this.permissionClassName = manager.getModel('permission');
|
|
9
15
|
this.permissionQuery = getPermissionModelQuery(this.permissionClassName);
|
|
10
16
|
}
|
|
11
|
-
on(scope) {
|
|
12
|
-
this.scope.set(scope);
|
|
13
|
-
return this;
|
|
14
|
-
}
|
|
15
|
-
getScope() {
|
|
16
|
-
return this.scope.get();
|
|
17
|
-
}
|
|
18
17
|
delete(permission) {
|
|
19
18
|
return this.permissionQuery.where('slug', permission).delete();
|
|
20
19
|
}
|
|
@@ -1,24 +1,27 @@
|
|
|
1
|
-
import { AclModel, MorphInterface,
|
|
1
|
+
import { AclModel, MorphInterface, OptionsInterface, PermissionInterface } from '../../types.js';
|
|
2
2
|
import ModelService from '../model_service.js';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import RoleService from '../roles/roles_service.js';
|
|
4
|
+
import PermissionService from './permissions_service.js';
|
|
5
5
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
6
|
-
|
|
6
|
+
import BaseAdapter from '../base_adapter.js';
|
|
7
|
+
import ModelManager from '../../model_manager.js';
|
|
8
|
+
export default class PermissionHasModelRoles extends BaseAdapter {
|
|
9
|
+
protected manager: ModelManager;
|
|
10
|
+
protected map: MorphInterface;
|
|
11
|
+
protected options: OptionsInterface;
|
|
7
12
|
private permission;
|
|
8
|
-
private roleService;
|
|
9
|
-
private permissionService;
|
|
10
|
-
private modelService;
|
|
11
|
-
private modelPermissionClassName;
|
|
12
|
-
private roleClassName;
|
|
13
|
-
private map;
|
|
14
|
-
private scope;
|
|
15
13
|
private modelPermissionQuery;
|
|
14
|
+
protected modelPermissionClassName: typeof BaseModel;
|
|
15
|
+
protected roleClassName: typeof BaseModel;
|
|
16
|
+
protected roleService: RoleService;
|
|
17
|
+
protected permissionService: PermissionService;
|
|
18
|
+
protected modelService: ModelService;
|
|
16
19
|
private roleQuery;
|
|
17
20
|
private readonly roleTable;
|
|
18
|
-
constructor(
|
|
21
|
+
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface, permission: PermissionInterface);
|
|
19
22
|
models(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").ModelPermissionModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
20
23
|
on(scope: string): this;
|
|
21
|
-
getScope():
|
|
24
|
+
getScope(): any;
|
|
22
25
|
modelsFor(modelType: string): Promise<any>;
|
|
23
26
|
roles(): Promise<import("../../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
24
27
|
belongsToRole(role: string | number): Promise<boolean>;
|
|
@@ -1,31 +1,41 @@
|
|
|
1
1
|
import { destructTarget } from '../helper.js';
|
|
2
|
+
import ModelService from '../model_service.js';
|
|
3
|
+
import PermissionService from './permissions_service.js';
|
|
2
4
|
import { getModelPermissionModelQuery, getRoleModelQuery } from '../query_helper.js';
|
|
3
|
-
|
|
5
|
+
import BaseAdapter from '../base_adapter.js';
|
|
6
|
+
import RolesService from '../roles/roles_service.js';
|
|
7
|
+
export default class PermissionHasModelRoles extends BaseAdapter {
|
|
8
|
+
manager;
|
|
9
|
+
map;
|
|
10
|
+
options;
|
|
4
11
|
permission;
|
|
12
|
+
modelPermissionQuery;
|
|
13
|
+
modelPermissionClassName;
|
|
14
|
+
roleClassName;
|
|
5
15
|
roleService;
|
|
6
16
|
permissionService;
|
|
7
17
|
modelService;
|
|
8
|
-
modelPermissionClassName;
|
|
9
|
-
roleClassName;
|
|
10
|
-
map;
|
|
11
|
-
scope;
|
|
12
|
-
modelPermissionQuery;
|
|
13
18
|
// private readonly modelPermissionTable
|
|
14
19
|
roleQuery;
|
|
15
20
|
roleTable;
|
|
16
|
-
constructor(
|
|
17
|
-
|
|
18
|
-
this.
|
|
19
|
-
this.permissionService = permissionService;
|
|
20
|
-
this.modelService = modelService;
|
|
21
|
-
this.modelPermissionClassName = modelPermissionClassName;
|
|
22
|
-
this.roleClassName = roleClassName;
|
|
21
|
+
constructor(manager, map, options, permission) {
|
|
22
|
+
super(manager, map, options);
|
|
23
|
+
this.manager = manager;
|
|
23
24
|
this.map = map;
|
|
24
|
-
this.
|
|
25
|
+
this.options = options;
|
|
26
|
+
this.permission = permission;
|
|
27
|
+
this.modelPermissionClassName = manager.getModel('modelPermission');
|
|
28
|
+
this.roleClassName = manager.getModel('role');
|
|
25
29
|
this.modelPermissionQuery = getModelPermissionModelQuery(this.modelPermissionClassName);
|
|
26
30
|
// this.modelPermissionTable = this.modelPermissionClassName.table
|
|
27
31
|
this.roleQuery = getRoleModelQuery(this.roleClassName);
|
|
28
32
|
this.roleTable = this.roleClassName.table;
|
|
33
|
+
const role = manager.getModel('role');
|
|
34
|
+
const modelPermission = manager.getModel('modelPermission');
|
|
35
|
+
const modelRole = manager.getModel('modelRole');
|
|
36
|
+
this.roleService = new RolesService(this.options, role, modelPermission, modelRole, map);
|
|
37
|
+
this.permissionService = new PermissionService(this.options, manager.getModel('permission'), role, modelPermission, modelRole, map);
|
|
38
|
+
this.modelService = new ModelService(this.options, modelPermission, modelRole, map);
|
|
29
39
|
}
|
|
30
40
|
models() {
|
|
31
41
|
return this.modelService.allByPermission(this.permission.getModelId());
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
|
|
2
|
-
import { ModelIdType, ModelPermissionsQuery, MorphInterface,
|
|
2
|
+
import { ModelIdType, ModelPermissionsQuery, MorphInterface, OptionsInterface, PermissionModel } from '../../types.js';
|
|
3
3
|
import BaseService from '../base_service.js';
|
|
4
4
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
5
5
|
export default class PermissionsService extends BaseService {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
protected options: OptionsInterface;
|
|
7
|
+
protected permissionClassName: typeof BaseModel;
|
|
8
|
+
protected roleClassName: typeof BaseModel;
|
|
9
|
+
protected modelPermissionClassName: typeof BaseModel;
|
|
10
|
+
protected modelRoleClassName: typeof BaseModel;
|
|
11
|
+
protected map: MorphInterface;
|
|
12
12
|
private readonly permissionTable;
|
|
13
|
-
private modelPermissionQuery;
|
|
14
13
|
private readonly modelPermissionTable;
|
|
15
14
|
private readonly modelRoleTable;
|
|
16
|
-
constructor(permissionClassName: typeof BaseModel, roleClassName: typeof BaseModel, modelPermissionClassName: typeof BaseModel, modelRoleClassName: typeof BaseModel, map: MorphInterface
|
|
15
|
+
constructor(options: OptionsInterface, permissionClassName: typeof BaseModel, roleClassName: typeof BaseModel, modelPermissionClassName: typeof BaseModel, modelRoleClassName: typeof BaseModel, map: MorphInterface);
|
|
17
16
|
private get permissionQuery();
|
|
17
|
+
private get modelPermissionQuery();
|
|
18
18
|
/**
|
|
19
19
|
* return all permissions, including forbidden
|
|
20
20
|
*/
|
|
@@ -1,42 +1,35 @@
|
|
|
1
1
|
import BaseService from '../base_service.js';
|
|
2
2
|
import { getModelPermissionModelQuery, getPermissionModelQuery } from '../query_helper.js';
|
|
3
3
|
export default class PermissionsService extends BaseService {
|
|
4
|
+
options;
|
|
4
5
|
permissionClassName;
|
|
5
6
|
roleClassName;
|
|
6
7
|
modelPermissionClassName;
|
|
7
8
|
modelRoleClassName;
|
|
8
9
|
map;
|
|
9
|
-
scope;
|
|
10
|
-
// private permissionQuery
|
|
11
10
|
permissionTable;
|
|
12
|
-
// private roleQuery
|
|
13
|
-
// private readonly roleTable
|
|
14
|
-
modelPermissionQuery;
|
|
15
11
|
modelPermissionTable;
|
|
16
|
-
// private modelRoleQuery
|
|
17
12
|
modelRoleTable;
|
|
18
|
-
constructor(permissionClassName, roleClassName, modelPermissionClassName, modelRoleClassName, map
|
|
19
|
-
super();
|
|
13
|
+
constructor(options, permissionClassName, roleClassName, modelPermissionClassName, modelRoleClassName, map) {
|
|
14
|
+
super(options);
|
|
15
|
+
this.options = options;
|
|
20
16
|
this.permissionClassName = permissionClassName;
|
|
21
17
|
this.roleClassName = roleClassName;
|
|
22
18
|
this.modelPermissionClassName = modelPermissionClassName;
|
|
23
19
|
this.modelRoleClassName = modelRoleClassName;
|
|
24
20
|
this.map = map;
|
|
25
|
-
this.scope = scope;
|
|
26
|
-
// this.permissionQuery = getPermissionModelQuery(this.permissionClassName)
|
|
27
21
|
this.permissionTable = this.permissionClassName.table;
|
|
28
|
-
// this.roleQuery = getRoleModelQuery(this.roleClassName)
|
|
29
|
-
// this.roleTable = this.roleClassName.table
|
|
30
|
-
this.modelPermissionQuery = getModelPermissionModelQuery(this.modelPermissionClassName);
|
|
31
22
|
this.modelPermissionTable = this.modelPermissionClassName.table;
|
|
32
|
-
// this.modelRoleQuery = getModelRoleModelQuery(this.modelRoleClassName)
|
|
33
23
|
this.modelRoleTable = this.modelRoleClassName.table;
|
|
34
24
|
}
|
|
35
25
|
get permissionQuery() {
|
|
36
|
-
const q = getPermissionModelQuery(this.permissionClassName);
|
|
26
|
+
const q = getPermissionModelQuery(this.permissionClassName, this.getQueryOptions());
|
|
37
27
|
this.applyScopes(q);
|
|
38
28
|
return q;
|
|
39
29
|
}
|
|
30
|
+
get modelPermissionQuery() {
|
|
31
|
+
return getModelPermissionModelQuery(this.modelPermissionClassName, this.getQueryOptions());
|
|
32
|
+
}
|
|
40
33
|
/**
|
|
41
34
|
* return all permissions, including forbidden
|
|
42
35
|
*/
|
|
@@ -295,7 +288,7 @@ export default class PermissionsService extends BaseService {
|
|
|
295
288
|
entityType: entityType || '*',
|
|
296
289
|
entityId,
|
|
297
290
|
allowed,
|
|
298
|
-
scope: this.scope
|
|
291
|
+
scope: this.scope,
|
|
299
292
|
});
|
|
300
293
|
}
|
|
301
294
|
else {
|
|
@@ -303,7 +296,7 @@ export default class PermissionsService extends BaseService {
|
|
|
303
296
|
}
|
|
304
297
|
}
|
|
305
298
|
if (createManyData.length) {
|
|
306
|
-
const newPermissions = (await this.permissionClassName.createMany(createManyData));
|
|
299
|
+
const newPermissions = (await this.permissionClassName.createMany(createManyData, this.getQueryOptions()));
|
|
307
300
|
newPermissions.map((i) => permissionIds.push(i.id));
|
|
308
301
|
}
|
|
309
302
|
// first check if there are assigned or not
|
|
@@ -321,7 +314,7 @@ export default class PermissionsService extends BaseService {
|
|
|
321
314
|
modelId: modelId,
|
|
322
315
|
permissionId: i,
|
|
323
316
|
}));
|
|
324
|
-
return this.modelPermissionClassName.createMany(modelPermissionMany);
|
|
317
|
+
return this.modelPermissionClassName.createMany(modelPermissionMany, this.getQueryOptions());
|
|
325
318
|
}
|
|
326
319
|
revokeAll(modelType, modelId, permissions, entityType, entityId) {
|
|
327
320
|
const q = this.modelPermissionQuery
|
|
@@ -513,9 +506,9 @@ export default class PermissionsService extends BaseService {
|
|
|
513
506
|
}
|
|
514
507
|
}
|
|
515
508
|
applyScopes(q) {
|
|
516
|
-
q.where(this.permissionTable + '.scope', this.scope
|
|
509
|
+
q.where(this.permissionTable + '.scope', this.scope);
|
|
517
510
|
}
|
|
518
511
|
applyModelPermissionScopes(q, table) {
|
|
519
|
-
q.where(table + '.scope', this.scope
|
|
512
|
+
q.where(table + '.scope', this.scope);
|
|
520
513
|
}
|
|
521
514
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { LucidModel, ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
|
|
1
|
+
import { LucidModel, ModelAdapterOptions, ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
|
|
2
2
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
3
3
|
import { ModelPermissionModel, ModelRoleModel, PermissionModel, RoleModel } from '../types.js';
|
|
4
|
-
export declare function getPermissionModelQuery<T extends LucidModel>(className: typeof BaseModel): ModelQueryBuilderContract<T, PermissionModel<T>>;
|
|
5
|
-
export declare function getRoleModelQuery<T extends LucidModel>(className: typeof BaseModel): ModelQueryBuilderContract<T, RoleModel<T>>;
|
|
6
|
-
export declare function getModelPermissionModelQuery<T extends LucidModel>(className: typeof BaseModel): ModelQueryBuilderContract<T, ModelPermissionModel<T>>;
|
|
7
|
-
export declare function getModelRoleModelQuery<T extends LucidModel>(className: typeof BaseModel): ModelQueryBuilderContract<T, ModelRoleModel<T>>;
|
|
4
|
+
export declare function getPermissionModelQuery<T extends LucidModel>(className: typeof BaseModel, options?: ModelAdapterOptions): ModelQueryBuilderContract<T, PermissionModel<T>>;
|
|
5
|
+
export declare function getRoleModelQuery<T extends LucidModel>(className: typeof BaseModel, options?: ModelAdapterOptions): ModelQueryBuilderContract<T, RoleModel<T>>;
|
|
6
|
+
export declare function getModelPermissionModelQuery<T extends LucidModel>(className: typeof BaseModel, options?: ModelAdapterOptions): ModelQueryBuilderContract<T, ModelPermissionModel<T>>;
|
|
7
|
+
export declare function getModelRoleModelQuery<T extends LucidModel>(className: typeof BaseModel, options?: ModelAdapterOptions): ModelQueryBuilderContract<T, ModelRoleModel<T>>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export function getPermissionModelQuery(className) {
|
|
2
|
-
return className.query();
|
|
1
|
+
export function getPermissionModelQuery(className, options) {
|
|
2
|
+
return className.query(options);
|
|
3
3
|
}
|
|
4
|
-
export function getRoleModelQuery(className) {
|
|
5
|
-
return className.query();
|
|
4
|
+
export function getRoleModelQuery(className, options) {
|
|
5
|
+
return className.query(options);
|
|
6
6
|
}
|
|
7
|
-
export function getModelPermissionModelQuery(className) {
|
|
8
|
-
return className.query();
|
|
7
|
+
export function getModelPermissionModelQuery(className, options) {
|
|
8
|
+
return className.query(options);
|
|
9
9
|
}
|
|
10
|
-
export function getModelRoleModelQuery(className) {
|
|
11
|
-
return className.query();
|
|
10
|
+
export function getModelRoleModelQuery(className, options) {
|
|
11
|
+
return className.query(options);
|
|
12
12
|
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
2
|
-
import { RoleInterface, RoleModel
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { MorphInterface, OptionsInterface, RoleInterface, RoleModel } from '../../types.js';
|
|
3
|
+
import BaseAdapter from '../base_adapter.js';
|
|
4
|
+
import ModelManager from '../../model_manager.js';
|
|
5
|
+
export default class EmptyRoles extends BaseAdapter {
|
|
6
|
+
protected manager: ModelManager;
|
|
7
|
+
protected map: MorphInterface;
|
|
8
|
+
protected options: OptionsInterface;
|
|
6
9
|
private roleQuery;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
getScope(): string;
|
|
10
|
+
protected roleClassName: typeof BaseModel;
|
|
11
|
+
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface);
|
|
10
12
|
delete(role: string): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, any>;
|
|
11
13
|
create(values: Partial<RoleInterface>): Promise<RoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
12
14
|
query(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, RoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { getRoleModelQuery } from '../query_helper.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import BaseAdapter from '../base_adapter.js';
|
|
3
|
+
export default class EmptyRoles extends BaseAdapter {
|
|
4
|
+
manager;
|
|
5
|
+
map;
|
|
6
|
+
options;
|
|
5
7
|
roleQuery;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
roleClassName;
|
|
9
|
+
constructor(manager, map, options) {
|
|
10
|
+
super(manager, map, options);
|
|
11
|
+
this.manager = manager;
|
|
12
|
+
this.map = map;
|
|
13
|
+
this.options = options;
|
|
14
|
+
this.roleClassName = manager.getModel('role');
|
|
9
15
|
this.roleQuery = getRoleModelQuery(this.roleClassName);
|
|
10
16
|
}
|
|
11
|
-
on(scope) {
|
|
12
|
-
this.scope.set(scope);
|
|
13
|
-
return this;
|
|
14
|
-
}
|
|
15
|
-
getScope() {
|
|
16
|
-
return this.scope.get();
|
|
17
|
-
}
|
|
18
17
|
delete(role) {
|
|
19
18
|
return this.roleQuery.where('slug', role).delete();
|
|
20
19
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import ModelService from '../model_service.js';
|
|
2
|
-
import
|
|
3
|
-
import { AclModel, MorphInterface,
|
|
4
|
-
|
|
2
|
+
import PermissionService from '../permissions/permissions_service.js';
|
|
3
|
+
import { AclModel, MorphInterface, OptionsInterface, RoleInterface } from '../../types.js';
|
|
4
|
+
import BaseAdapter from '../base_adapter.js';
|
|
5
|
+
import ModelManager from '../../model_manager.js';
|
|
6
|
+
export declare class RoleHasModelPermissions extends BaseAdapter {
|
|
7
|
+
protected manager: ModelManager;
|
|
8
|
+
protected map: MorphInterface;
|
|
9
|
+
protected options: OptionsInterface;
|
|
5
10
|
private role;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
private scope;
|
|
10
|
-
constructor(role: RoleInterface, permissionService: PermissionsService, modelService: ModelService, map: MorphInterface, scope: ScopeInterface);
|
|
11
|
-
on(scope: string): this;
|
|
12
|
-
getScope(): string;
|
|
11
|
+
protected modelService: ModelService;
|
|
12
|
+
protected permissionService: PermissionService;
|
|
13
|
+
constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface, role: RoleInterface);
|
|
13
14
|
models(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").ModelRoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
14
15
|
modelsFor(modelType: string): Promise<any>;
|
|
15
16
|
permissions(): Promise<import("../../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import { destructTarget } from '../helper.js';
|
|
2
|
-
|
|
2
|
+
import ModelService from '../model_service.js';
|
|
3
|
+
import PermissionService from '../permissions/permissions_service.js';
|
|
4
|
+
import BaseAdapter from '../base_adapter.js';
|
|
5
|
+
export class RoleHasModelPermissions extends BaseAdapter {
|
|
6
|
+
manager;
|
|
7
|
+
map;
|
|
8
|
+
options;
|
|
3
9
|
role;
|
|
4
|
-
permissionService;
|
|
5
10
|
modelService;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
this.
|
|
10
|
-
this.permissionService = permissionService;
|
|
11
|
-
this.modelService = modelService;
|
|
11
|
+
permissionService;
|
|
12
|
+
constructor(manager, map, options, role) {
|
|
13
|
+
super(manager, map, options);
|
|
14
|
+
this.manager = manager;
|
|
12
15
|
this.map = map;
|
|
13
|
-
this.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
this.options = options;
|
|
17
|
+
this.role = role;
|
|
18
|
+
const roleClass = manager.getModel('role');
|
|
19
|
+
const modelPermission = manager.getModel('modelPermission');
|
|
20
|
+
const modelRole = manager.getModel('modelRole');
|
|
21
|
+
const permission = manager.getModel('permission');
|
|
22
|
+
this.modelService = new ModelService(this.options, modelPermission, modelRole, map);
|
|
23
|
+
this.permissionService = new PermissionService(this.options, permission, roleClass, modelPermission, modelRole, map);
|
|
21
24
|
}
|
|
22
25
|
models() {
|
|
23
26
|
return this.modelService.all(+this.role.getModelId());
|
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import { AclModel, ModelIdType, MorphInterface,
|
|
1
|
+
import { AclModel, ModelIdType, MorphInterface, OptionsInterface } from '../../types.js';
|
|
2
2
|
import BaseService from '../base_service.js';
|
|
3
3
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
4
4
|
import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
|
|
5
5
|
export default class RolesService extends BaseService {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
private roleQuery;
|
|
6
|
+
protected options: OptionsInterface;
|
|
7
|
+
protected roleClassName: typeof BaseModel;
|
|
8
|
+
protected modelPermissionClassName: typeof BaseModel;
|
|
9
|
+
protected modelRoleClassName: typeof BaseModel;
|
|
10
|
+
protected map: MorphInterface;
|
|
12
11
|
private readonly roleTable;
|
|
13
12
|
private readonly modelPermissionTable;
|
|
14
|
-
private modelRoleQuery;
|
|
15
13
|
private readonly modelRoleTable;
|
|
16
|
-
|
|
17
|
-
constructor(roleClassName: typeof BaseModel, modelPermissionClassName: typeof BaseModel, modelRoleClassName: typeof BaseModel, map: MorphInterface, scope: ScopeInterface);
|
|
14
|
+
constructor(options: OptionsInterface, roleClassName: typeof BaseModel, modelPermissionClassName: typeof BaseModel, modelRoleClassName: typeof BaseModel, map: MorphInterface);
|
|
18
15
|
private modelRolesQuery;
|
|
16
|
+
private get roleQuery();
|
|
17
|
+
private get modelRoleQuery();
|
|
19
18
|
all(modelType: string, modelId: ModelIdType): ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
|
|
20
19
|
has(modelType: string, modelId: ModelIdType, role: string): Promise<boolean>;
|
|
21
20
|
hasAll(modelType: string, modelId: ModelIdType, roles: string[]): Promise<boolean>;
|
|
@@ -5,38 +5,26 @@ getModelRoleModelQuery,
|
|
|
5
5
|
// getPermissionModelQuery,
|
|
6
6
|
getRoleModelQuery, } from '../query_helper.js';
|
|
7
7
|
export default class RolesService extends BaseService {
|
|
8
|
+
options;
|
|
8
9
|
roleClassName;
|
|
9
10
|
modelPermissionClassName;
|
|
10
11
|
modelRoleClassName;
|
|
11
12
|
map;
|
|
12
|
-
scope;
|
|
13
|
-
// private permissionQuery
|
|
14
|
-
// private readonly permissionTable
|
|
15
|
-
roleQuery;
|
|
16
13
|
roleTable;
|
|
17
14
|
// private modelPermissionQuery
|
|
18
15
|
modelPermissionTable;
|
|
19
|
-
modelRoleQuery;
|
|
20
16
|
modelRoleTable;
|
|
21
|
-
|
|
22
|
-
constructor(roleClassName,
|
|
17
|
+
constructor(options, roleClassName,
|
|
23
18
|
// private permissionClassName: typeof BaseModel,
|
|
24
|
-
modelPermissionClassName, modelRoleClassName, map
|
|
25
|
-
super();
|
|
19
|
+
modelPermissionClassName, modelRoleClassName, map) {
|
|
20
|
+
super(options);
|
|
21
|
+
this.options = options;
|
|
26
22
|
this.roleClassName = roleClassName;
|
|
27
23
|
this.modelPermissionClassName = modelPermissionClassName;
|
|
28
24
|
this.modelRoleClassName = modelRoleClassName;
|
|
29
25
|
this.map = map;
|
|
30
|
-
this.scope = scope;
|
|
31
|
-
// this.permissionQuery = getPermissionModelQuery(this.permissionClassName)
|
|
32
|
-
// this.permissionTable = this.permissionClassName.table
|
|
33
|
-
this.currentScope = this.scope.get();
|
|
34
|
-
this.roleQuery = getRoleModelQuery(this.roleClassName);
|
|
35
26
|
this.roleTable = this.roleClassName.table;
|
|
36
|
-
this.applyScopes(this.roleQuery, this.currentScope);
|
|
37
|
-
// this.modelPermissionQuery = getModelPermissionModelQuery(this.modelPermissionClassName)
|
|
38
27
|
this.modelPermissionTable = this.modelPermissionClassName.table;
|
|
39
|
-
this.modelRoleQuery = getModelRoleModelQuery(this.modelRoleClassName);
|
|
40
28
|
this.modelRoleTable = this.modelRoleClassName.table;
|
|
41
29
|
}
|
|
42
30
|
modelRolesQuery(modelType, modelId) {
|
|
@@ -45,6 +33,14 @@ export default class RolesService extends BaseService {
|
|
|
45
33
|
.where('mr.model_type', modelType)
|
|
46
34
|
.where('mr.model_id', modelId);
|
|
47
35
|
}
|
|
36
|
+
get roleQuery() {
|
|
37
|
+
const q = getRoleModelQuery(this.roleClassName, this.getQueryOptions());
|
|
38
|
+
this.applyScopes(q, this.scope);
|
|
39
|
+
return q;
|
|
40
|
+
}
|
|
41
|
+
get modelRoleQuery() {
|
|
42
|
+
return getModelRoleModelQuery(this.modelRoleClassName, this.getQueryOptions());
|
|
43
|
+
}
|
|
48
44
|
all(modelType, modelId) {
|
|
49
45
|
return this.modelRolesQuery(modelType, modelId)
|
|
50
46
|
.distinct(this.roleTable + '.id')
|
|
@@ -63,10 +59,6 @@ export default class RolesService extends BaseService {
|
|
|
63
59
|
rolesQuery.whereIn(this.roleTable + '.id', ids);
|
|
64
60
|
}
|
|
65
61
|
const r = await rolesQuery.count('* as total');
|
|
66
|
-
// const q = await rolesQuery.toQuery()
|
|
67
|
-
// const all = await rolesQuery
|
|
68
|
-
// console.log(q)
|
|
69
|
-
// console.log(all)
|
|
70
62
|
// @ts-ignore
|
|
71
63
|
return +r[0].$extras.total === roles.length;
|
|
72
64
|
}
|
|
@@ -111,7 +103,7 @@ export default class RolesService extends BaseService {
|
|
|
111
103
|
roleId: id,
|
|
112
104
|
});
|
|
113
105
|
}
|
|
114
|
-
await this.modelRoleClassName.createMany(data);
|
|
106
|
+
await this.modelRoleClassName.createMany(data, this.getQueryOptions());
|
|
115
107
|
return true;
|
|
116
108
|
}
|
|
117
109
|
async revoke(role, model) {
|
|
@@ -131,7 +123,7 @@ export default class RolesService extends BaseService {
|
|
|
131
123
|
query.orWhereIn('r.id', ids);
|
|
132
124
|
}
|
|
133
125
|
});
|
|
134
|
-
this.applyModelRoleScopes(q, 'r', this.
|
|
126
|
+
this.applyModelRoleScopes(q, 'r', this.scope);
|
|
135
127
|
await q.delete();
|
|
136
128
|
return true;
|
|
137
129
|
}
|
package/build/src/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LucidModel } from '@adonisjs/lucid/types/model';
|
|
1
|
+
import { LucidModel, ModelAdapterOptions } from '@adonisjs/lucid/types/model';
|
|
2
2
|
import { DateTime } from 'luxon';
|
|
3
3
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
4
4
|
import { Scope } from './scope.js';
|
|
@@ -78,6 +78,8 @@ export interface MorphInterface {
|
|
|
78
78
|
export interface ModelManagerInterface {
|
|
79
79
|
[key: string]: any;
|
|
80
80
|
}
|
|
81
|
+
export interface OptionsInterface extends ModelManagerInterface {
|
|
82
|
+
}
|
|
81
83
|
export interface Permissions {
|
|
82
84
|
tables: Object;
|
|
83
85
|
morphMaps: Object;
|
|
@@ -94,6 +96,7 @@ export interface ModelManagerBindings {
|
|
|
94
96
|
permission: typeof BaseModel;
|
|
95
97
|
modelRole: typeof BaseModel;
|
|
96
98
|
modelPermission: typeof BaseModel;
|
|
99
|
+
queryClient: ModelAdapterOptions;
|
|
97
100
|
}
|
|
98
101
|
export interface AclMiddlewareOptions {
|
|
99
102
|
role: string;
|