@holoyan/adonisjs-permissions 0.1.0 → 0.5.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 +160 -59
- package/build/index.d.ts +10 -4
- package/build/index.js +10 -5
- package/build/providers/role_permission_provider.d.ts +3 -0
- package/build/providers/role_permission_provider.js +21 -0
- package/build/src/acl.d.ts +10 -5
- package/build/src/acl.js +17 -9
- package/build/src/decorators.js +1 -0
- package/build/src/mixins/has_permissions.d.ts +58 -26
- package/build/src/mixins/has_permissions.js +123 -18
- package/build/src/model_manager.d.ts +7 -0
- package/build/src/model_manager.js +15 -0
- package/build/src/models/permission.d.ts +4 -4
- package/build/src/models/permission.js +2 -7
- package/build/src/models/role.d.ts +1 -1
- package/build/src/models/role.js +2 -7
- package/build/src/morph_map.d.ts +5 -2
- package/build/src/morph_map.js +16 -9
- package/build/src/services/helper.d.ts +2 -3
- package/build/src/services/helper.js +1 -7
- package/build/src/services/model_has_role_permissions.d.ts +41 -39
- package/build/src/services/model_has_role_permissions.js +92 -111
- package/build/src/services/model_service.d.ts +15 -6
- package/build/src/services/model_service.js +39 -14
- package/build/src/services/permissions/empty_permission.d.ts +8 -0
- package/build/src/services/permissions/empty_permission.js +17 -0
- package/build/src/services/permissions/permission_has_model_roles.d.ts +12 -8
- package/build/src/services/permissions/permission_has_model_roles.js +28 -19
- package/build/src/services/permissions/permissions_service.d.ts +42 -30
- package/build/src/services/permissions/permissions_service.js +188 -155
- package/build/src/services/query_helper.d.ts +7 -0
- package/build/src/services/query_helper.js +12 -0
- package/build/src/services/roles/empty_roles.d.ts +8 -0
- package/build/src/services/roles/empty_roles.js +17 -0
- package/build/src/services/roles/role_has_model_permissions.d.ts +32 -33
- package/build/src/services/roles/role_has_model_permissions.js +64 -78
- package/build/src/services/roles/roles_service.d.ts +20 -9
- package/build/src/services/roles/roles_service.js +83 -30
- package/build/src/types.d.ts +65 -5
- package/build/stubs/configs/permissions.stub +1 -1
- package/build/stubs/migrations/create_db.stub +8 -8
- package/package.json +3 -1
- package/build/src/mixins/has_role_permissions.d.ts +0 -128
- package/build/src/mixins/has_role_permissions.js +0 -10
- package/build/src/mixins/has_roles.d.ts +0 -1
- package/build/src/mixins/has_roles.js +0 -47
|
@@ -1,13 +1,46 @@
|
|
|
1
1
|
import type { NormalizeConstructor } from '@adonisjs/core/types/helpers';
|
|
2
2
|
import Permission from '../models/permission.js';
|
|
3
|
-
|
|
3
|
+
import { AclModel, RoleInterface } from '../types.js';
|
|
4
|
+
export declare function hasPermissions(): <Model extends NormalizeConstructor<import("@adonisjs/lucid/types/model").LucidModel>>(superclass: Model) => {
|
|
4
5
|
new (...args: any[]): {
|
|
5
|
-
getMorphMapName(): string;
|
|
6
6
|
getModelId(): number;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
roles(): Promise<import("../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
8
|
+
hasRole(role: string | RoleInterface): Promise<boolean>;
|
|
9
|
+
hasAllRoles(...roles: (string | RoleInterface)[]): Promise<boolean>;
|
|
10
|
+
hasAnyRole(...roles: (string | RoleInterface)[]): Promise<boolean>;
|
|
11
|
+
assignRole(role: string | RoleInterface): Promise<boolean>;
|
|
12
|
+
revokeRole(role: string | number | RoleInterface): Promise<boolean>;
|
|
13
|
+
revokeAllRoles(...roles: (string | number | RoleInterface)[]): Promise<boolean>;
|
|
14
|
+
permissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
15
|
+
globalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
16
|
+
onResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
17
|
+
directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
18
|
+
directResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
19
|
+
containsPermission(permission: string | Permission): Promise<boolean>;
|
|
20
|
+
containsAllPermissions(permissions: (string | Permission)[]): Promise<boolean>;
|
|
21
|
+
containsAnyPermission(permissions: (string | Permission)[]): Promise<boolean>;
|
|
22
|
+
containsDirectPermission(permission: string | Permission): Promise<boolean>;
|
|
23
|
+
containsAllPermissionsDirectly(permissions: (string | Permission)[]): Promise<boolean>;
|
|
24
|
+
containsAnyPermissionDirectly(permissions: (string | Permission)[]): Promise<boolean>;
|
|
25
|
+
hasPermission(permission: string | Permission, target?: AclModel | Function): Promise<boolean>;
|
|
26
|
+
hasAllPermissions(permissions: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
|
|
27
|
+
hasAnyPermission(permissions: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
|
|
28
|
+
hasAnyDirectPermission(permissions: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
|
|
29
|
+
hasDirectPermission(permission: string | Permission, target?: AclModel | Function): Promise<boolean>;
|
|
30
|
+
hasAllPermissionsDirect(permissions: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
|
|
31
|
+
can(permission: string | Permission, target?: AclModel | Function): Promise<boolean>;
|
|
32
|
+
canAll(permissions: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
|
|
33
|
+
canAny(permissions: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
|
|
34
|
+
assignDirectPermission(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
35
|
+
allow(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
36
|
+
revokePermission(permission: string, target?: AclModel | Function): Promise<any[]>;
|
|
37
|
+
revokeAllPermissions(permissions: string[], target?: AclModel | Function): Promise<any[]>;
|
|
38
|
+
flushPermissions(): Promise<any[]>;
|
|
39
|
+
flush(): Promise<boolean>;
|
|
40
|
+
forbid(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
41
|
+
forbidAll(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
42
|
+
unforbidAll(permissions: string[], target?: AclModel | Function): Promise<any[]>;
|
|
43
|
+
unforbid(permission: string, target?: AclModel | Function): Promise<any[]>;
|
|
11
44
|
$attributes: import("@adonisjs/lucid/types/model").ModelObject;
|
|
12
45
|
$extras: import("@adonisjs/lucid/types/model").ModelObject;
|
|
13
46
|
$original: import("@adonisjs/lucid/types/model").ModelObject;
|
|
@@ -66,14 +99,14 @@ declare const _default: <Model extends NormalizeConstructor<import("@adonisjs/lu
|
|
|
66
99
|
related<Name_2 extends undefined>(relation: Name_2): any[Name_2] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? any[Name_2]["client"] : never;
|
|
67
100
|
};
|
|
68
101
|
find: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T> | null>;
|
|
102
|
+
all: <T_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_1>[]>;
|
|
103
|
+
namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract;
|
|
69
104
|
readonly booted: boolean;
|
|
70
|
-
boot: () => void;
|
|
71
105
|
$columnsDefinitions: Map<string, import("@adonisjs/lucid/types/model").ModelColumnOptions>;
|
|
72
106
|
$relationsDefinitions: Map<string, import("@adonisjs/lucid/types/relations").RelationshipsContract>;
|
|
73
107
|
$computedDefinitions: Map<string, import("@adonisjs/lucid/types/model").ComputedOptions>;
|
|
74
108
|
primaryKey: string;
|
|
75
109
|
connection?: string | undefined;
|
|
76
|
-
namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract;
|
|
77
110
|
table: string;
|
|
78
111
|
selfAssignPrimaryKey: boolean;
|
|
79
112
|
$adapter: import("@adonisjs/lucid/types/model").AdapterContract;
|
|
@@ -87,8 +120,8 @@ declare const _default: <Model extends NormalizeConstructor<import("@adonisjs/lu
|
|
|
87
120
|
serializedToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
88
121
|
serializedToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
|
|
89
122
|
};
|
|
90
|
-
$createFromAdapterResult: <
|
|
91
|
-
$createMultipleFromAdapterResult: <
|
|
123
|
+
$createFromAdapterResult: <T_2 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_2, result?: import("@adonisjs/lucid/types/model").ModelObject | undefined, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject | undefined, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => InstanceType<T_2> | null;
|
|
124
|
+
$createMultipleFromAdapterResult: <T_3 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_3, results: import("@adonisjs/lucid/types/model").ModelObject[], sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject | undefined, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => InstanceType<T_3>[];
|
|
92
125
|
$addColumn: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ColumnOptions>) => import("@adonisjs/lucid/types/model").ColumnOptions;
|
|
93
126
|
$hasColumn: (name: string) => boolean;
|
|
94
127
|
$getColumn: (name: string) => import("@adonisjs/lucid/types/model").ModelColumnOptions | undefined;
|
|
@@ -102,6 +135,7 @@ declare const _default: <Model extends NormalizeConstructor<import("@adonisjs/lu
|
|
|
102
135
|
<Model_2 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_2, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
|
|
103
136
|
};
|
|
104
137
|
$defineProperty: <Model_3 extends import("@adonisjs/lucid/types/model").LucidModel, Prop extends keyof Model_3>(this: Model_3, propertyName: Prop, defaultValue: Model_3[Prop], strategy: "inherit" | "define" | ((value: Model_3[Prop]) => Model_3[Prop])) => void;
|
|
138
|
+
boot: () => void;
|
|
105
139
|
before: {
|
|
106
140
|
<Model_4 extends import("@adonisjs/lucid/types/model").LucidModel, Event_1 extends "find" | "fetch">(this: Model_4, event: Event_1, handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_4, InstanceType<Model_4>>, Event_1>): void;
|
|
107
141
|
<Model_5 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_5, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<[import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_5, InstanceType<Model_5>>, import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_5, InstanceType<Model_5>>], "paginate">): void;
|
|
@@ -112,22 +146,20 @@ declare const _default: <Model extends NormalizeConstructor<import("@adonisjs/lu
|
|
|
112
146
|
<Model_8 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_8, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelPaginatorContract<InstanceType<Model_8>>, "paginate">): void;
|
|
113
147
|
<Model_9 extends import("@adonisjs/lucid/types/model").LucidModel, Event_3 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_9, event: Event_3, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_9>, Event_3>): void;
|
|
114
148
|
};
|
|
115
|
-
create: <
|
|
116
|
-
createMany: <
|
|
117
|
-
findOrFail: <
|
|
118
|
-
findBy: <
|
|
119
|
-
findByOrFail: <
|
|
120
|
-
first: <
|
|
121
|
-
firstOrFail: <
|
|
122
|
-
findMany: <
|
|
123
|
-
firstOrNew: <
|
|
124
|
-
firstOrCreate: <
|
|
125
|
-
updateOrCreate: <
|
|
126
|
-
fetchOrNewUpMany: <
|
|
127
|
-
fetchOrCreateMany: <
|
|
128
|
-
updateOrCreateMany: <
|
|
129
|
-
all: <T_17 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_17, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_17>[]>;
|
|
149
|
+
create: <T_4 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_4, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_4>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_4>>;
|
|
150
|
+
createMany: <T_5 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_5, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_5>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_5>[]>;
|
|
151
|
+
findOrFail: <T_6 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_6, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_6>>;
|
|
152
|
+
findBy: <T_7 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_7, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_7> | null>;
|
|
153
|
+
findByOrFail: <T_8 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_8, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_8>>;
|
|
154
|
+
first: <T_9 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_9, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_9> | null>;
|
|
155
|
+
firstOrFail: <T_10 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_10, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_10>>;
|
|
156
|
+
findMany: <T_11 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_11, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_11>[]>;
|
|
157
|
+
firstOrNew: <T_12 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_12, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_12>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_12>>> | undefined, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_12>>;
|
|
158
|
+
firstOrCreate: <T_13 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_13, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_13>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_13>>> | undefined, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_13>>;
|
|
159
|
+
updateOrCreate: <T_14 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_14, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_14>>>, updatePayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_14>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_14>>;
|
|
160
|
+
fetchOrNewUpMany: <T_15 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_15, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_15>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_15>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_15>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_15>[]>;
|
|
161
|
+
fetchOrCreateMany: <T_16 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_16, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_16>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_16>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_16>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_16>[]>;
|
|
162
|
+
updateOrCreateMany: <T_17 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_17, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_17>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_17>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_17>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_17>[]>;
|
|
130
163
|
query: <Model_10 extends import("@adonisjs/lucid/types/model").LucidModel, Result = InstanceType<Model_10>>(this: Model_10, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_10, Result>;
|
|
131
164
|
truncate: (cascade?: boolean | undefined) => Promise<void>;
|
|
132
165
|
} & Model;
|
|
133
|
-
export default _default;
|
|
@@ -1,19 +1,124 @@
|
|
|
1
|
-
import
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { Acl } from '../acl.js';
|
|
2
|
+
export function hasPermissions() {
|
|
3
|
+
return (superclass) => {
|
|
4
|
+
class HasPermissionsMixin extends superclass {
|
|
5
|
+
getModelId() {
|
|
6
|
+
throw new Error('method getModelId must be implemented in target model, which will return key for current object');
|
|
7
|
+
}
|
|
8
|
+
roles() {
|
|
9
|
+
return Acl.model(this).roles();
|
|
10
|
+
}
|
|
11
|
+
hasRole(role) {
|
|
12
|
+
return Acl.model(this).hasRole(role);
|
|
13
|
+
}
|
|
14
|
+
hasAllRoles(...roles) {
|
|
15
|
+
return Acl.model(this).hasAllRoles(...roles);
|
|
16
|
+
}
|
|
17
|
+
hasAnyRole(...roles) {
|
|
18
|
+
return Acl.model(this).hasAnyRole(...roles);
|
|
19
|
+
}
|
|
20
|
+
assignRole(role) {
|
|
21
|
+
return Acl.model(this).assignRole(role);
|
|
22
|
+
}
|
|
23
|
+
revokeRole(role) {
|
|
24
|
+
return Acl.model(this).revokeRole(role);
|
|
25
|
+
}
|
|
26
|
+
revokeAllRoles(...roles) {
|
|
27
|
+
return Acl.model(this).revokeAllRoles(...roles);
|
|
28
|
+
}
|
|
29
|
+
// roles related section END
|
|
30
|
+
// permissions related section BEGIN
|
|
31
|
+
permissions(includeForbiddings = false) {
|
|
32
|
+
return Acl.model(this).permissions(includeForbiddings);
|
|
33
|
+
}
|
|
34
|
+
globalPermissions(includeForbiddings = false) {
|
|
35
|
+
return Acl.model(this).globalPermissions(includeForbiddings);
|
|
36
|
+
}
|
|
37
|
+
async onResourcePermissions(includeForbiddings = false) {
|
|
38
|
+
return Acl.model(this).onResourcePermissions(includeForbiddings);
|
|
39
|
+
}
|
|
40
|
+
async directGlobalPermissions(includeForbiddings = false) {
|
|
41
|
+
return Acl.model(this).directGlobalPermissions(includeForbiddings);
|
|
42
|
+
}
|
|
43
|
+
async directResourcePermissions(includeForbiddings = false) {
|
|
44
|
+
return Acl.model(this).directResourcePermissions(includeForbiddings);
|
|
45
|
+
}
|
|
46
|
+
async containsPermission(permission) {
|
|
47
|
+
return Acl.model(this).containsPermission(permission);
|
|
48
|
+
}
|
|
49
|
+
async containsAllPermissions(permissions) {
|
|
50
|
+
return Acl.model(this).containsAllPermissions(permissions);
|
|
51
|
+
}
|
|
52
|
+
async containsAnyPermission(permissions) {
|
|
53
|
+
return Acl.model(this).containsAnyPermission(permissions);
|
|
54
|
+
}
|
|
55
|
+
async containsDirectPermission(permission) {
|
|
56
|
+
return Acl.model(this).containsDirectPermission(permission);
|
|
57
|
+
}
|
|
58
|
+
async containsAllPermissionsDirectly(permissions) {
|
|
59
|
+
return Acl.model(this).containsAllPermissionsDirectly(permissions);
|
|
60
|
+
}
|
|
61
|
+
async containsAnyPermissionDirectly(permissions) {
|
|
62
|
+
return Acl.model(this).containsAnyPermissionDirectly(permissions);
|
|
63
|
+
}
|
|
64
|
+
async hasPermission(permission, target) {
|
|
65
|
+
return Acl.model(this).hasPermission(permission, target);
|
|
66
|
+
}
|
|
67
|
+
async hasAllPermissions(permissions, target) {
|
|
68
|
+
return Acl.model(this).hasAllPermissions(permissions, target);
|
|
69
|
+
}
|
|
70
|
+
async hasAnyPermission(permissions, target) {
|
|
71
|
+
return Acl.model(this).hasAnyPermission(permissions, target);
|
|
72
|
+
}
|
|
73
|
+
async hasAnyDirectPermission(permissions, target) {
|
|
74
|
+
return Acl.model(this).hasAnyDirectPermission(permissions, target);
|
|
75
|
+
}
|
|
76
|
+
async hasDirectPermission(permission, target) {
|
|
77
|
+
return Acl.model(this).hasDirectPermission(permission, target);
|
|
78
|
+
}
|
|
79
|
+
async hasAllPermissionsDirect(permissions, target) {
|
|
80
|
+
return Acl.model(this).hasAllPermissionsDirect(permissions, target);
|
|
81
|
+
}
|
|
82
|
+
can(permission, target) {
|
|
83
|
+
return Acl.model(this).can(permission, target);
|
|
84
|
+
}
|
|
85
|
+
canAll(permissions, target) {
|
|
86
|
+
return Acl.model(this).canAll(permissions, target);
|
|
87
|
+
}
|
|
88
|
+
canAny(permissions, target) {
|
|
89
|
+
return Acl.model(this).canAny(permissions, target);
|
|
90
|
+
}
|
|
91
|
+
async assignDirectPermission(permission, target) {
|
|
92
|
+
return Acl.model(this).assignDirectPermission(permission, target);
|
|
93
|
+
}
|
|
94
|
+
allow(permission, target) {
|
|
95
|
+
return Acl.model(this).allow(permission, target);
|
|
96
|
+
}
|
|
97
|
+
async revokePermission(permission, target) {
|
|
98
|
+
return Acl.model(this).revokePermission(permission, target);
|
|
99
|
+
}
|
|
100
|
+
async revokeAllPermissions(permissions, target) {
|
|
101
|
+
return Acl.model(this).revokeAllPermissions(permissions, target);
|
|
102
|
+
}
|
|
103
|
+
async flushPermissions() {
|
|
104
|
+
return Acl.model(this).flushPermissions();
|
|
105
|
+
}
|
|
106
|
+
async flush() {
|
|
107
|
+
return Acl.model(this).flush();
|
|
108
|
+
}
|
|
109
|
+
async forbid(permission, target) {
|
|
110
|
+
return Acl.model(this).forbid(permission, target);
|
|
111
|
+
}
|
|
112
|
+
async forbidAll(permissions, target) {
|
|
113
|
+
return Acl.model(this).forbidAll(permissions, target);
|
|
114
|
+
}
|
|
115
|
+
async unforbidAll(permissions, target) {
|
|
116
|
+
return Acl.model(this).unforbidAll(permissions, target);
|
|
117
|
+
}
|
|
118
|
+
async unforbid(permission, target) {
|
|
119
|
+
return Acl.model(this).unforbid(permission, target);
|
|
120
|
+
}
|
|
6
121
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* return all permissions including global, direct
|
|
12
|
-
*/
|
|
13
|
-
permissions() {
|
|
14
|
-
const service = new PermissionsService();
|
|
15
|
-
return service.all(this.getMorphMapName(), this.getModelId());
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return HasPermissionsMixin;
|
|
19
|
-
};
|
|
122
|
+
return HasPermissionsMixin;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
2
|
+
export default class ModelManager {
|
|
3
|
+
private models;
|
|
4
|
+
setModel(key: string, className: typeof BaseModel): void;
|
|
5
|
+
has(key: string): boolean;
|
|
6
|
+
getModel(key: string): import("@adonisjs/lucid/types/model").LucidModel;
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default class ModelManager {
|
|
2
|
+
models = {};
|
|
3
|
+
setModel(key, className) {
|
|
4
|
+
this.models[key] = className;
|
|
5
|
+
}
|
|
6
|
+
has(key) {
|
|
7
|
+
return key in this.models;
|
|
8
|
+
}
|
|
9
|
+
getModel(key) {
|
|
10
|
+
if (key in this.models) {
|
|
11
|
+
return this.models[key];
|
|
12
|
+
}
|
|
13
|
+
throw new Error('Model not defined');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { DateTime } from 'luxon';
|
|
2
2
|
import { BaseModel } from '@adonisjs/lucid/orm';
|
|
3
|
-
import {
|
|
4
|
-
export default class Permission extends BaseModel implements
|
|
3
|
+
import { PermissionInterface } from '../types.js';
|
|
4
|
+
export default class Permission extends BaseModel implements PermissionInterface {
|
|
5
5
|
static get table(): string;
|
|
6
6
|
getModelId(): number;
|
|
7
7
|
id: number;
|
|
8
8
|
slug: string;
|
|
9
|
-
title: string;
|
|
10
|
-
entityType: string
|
|
9
|
+
title: string | null;
|
|
10
|
+
entityType: string;
|
|
11
11
|
entityId: number | null;
|
|
12
12
|
allowed: boolean;
|
|
13
13
|
scope: number;
|
|
@@ -6,15 +6,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { BaseModel, column } from '@adonisjs/lucid/orm';
|
|
8
8
|
import config from '@adonisjs/core/services/config';
|
|
9
|
-
|
|
10
|
-
let Permission = class Permission extends BaseModel {
|
|
9
|
+
export default class Permission extends BaseModel {
|
|
11
10
|
static get table() {
|
|
12
11
|
return config.get('permissions.permissionsConfig.tables.permissions');
|
|
13
12
|
}
|
|
14
13
|
getModelId() {
|
|
15
14
|
return this.id;
|
|
16
15
|
}
|
|
17
|
-
}
|
|
16
|
+
}
|
|
18
17
|
__decorate([
|
|
19
18
|
column({ isPrimary: true })
|
|
20
19
|
], Permission.prototype, "id", void 0);
|
|
@@ -42,7 +41,3 @@ __decorate([
|
|
|
42
41
|
__decorate([
|
|
43
42
|
column.dateTime({ autoCreate: true, autoUpdate: true })
|
|
44
43
|
], Permission.prototype, "updatedAt", void 0);
|
|
45
|
-
Permission = __decorate([
|
|
46
|
-
MorphMap(config.get('permissions.permissionsConfig.morphMaps.permissions'))
|
|
47
|
-
], Permission);
|
|
48
|
-
export default Permission;
|
package/build/src/models/role.js
CHANGED
|
@@ -6,15 +6,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { BaseModel, column } from '@adonisjs/lucid/orm';
|
|
8
8
|
import config from '@adonisjs/core/services/config';
|
|
9
|
-
|
|
10
|
-
let Role = class Role extends BaseModel {
|
|
9
|
+
export default class Role extends BaseModel {
|
|
11
10
|
static get table() {
|
|
12
11
|
return config.get('permissions.permissionsConfig.tables.roles');
|
|
13
12
|
}
|
|
14
13
|
getModelId() {
|
|
15
14
|
return this.id;
|
|
16
15
|
}
|
|
17
|
-
}
|
|
16
|
+
}
|
|
18
17
|
__decorate([
|
|
19
18
|
column({ isPrimary: true })
|
|
20
19
|
], Role.prototype, "id", void 0);
|
|
@@ -42,7 +41,3 @@ __decorate([
|
|
|
42
41
|
__decorate([
|
|
43
42
|
column.dateTime({ autoCreate: true, autoUpdate: true })
|
|
44
43
|
], Role.prototype, "updatedAt", void 0);
|
|
45
|
-
Role = __decorate([
|
|
46
|
-
MorphMap(config.get('permissions.permissionsConfig.morphMaps.roles'))
|
|
47
|
-
], Role);
|
|
48
|
-
export default Role;
|
package/build/src/morph_map.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { MorphInterface } from './types.js';
|
|
2
|
+
export default class MorphMap implements MorphInterface {
|
|
3
|
+
private _map;
|
|
4
|
+
private static _instance?;
|
|
5
|
+
static create(): MorphMap;
|
|
3
6
|
set(alias: string, target: any): void;
|
|
4
7
|
get(alias: string): any;
|
|
5
8
|
has(alias: string): boolean;
|
package/build/src/morph_map.js
CHANGED
|
@@ -1,30 +1,37 @@
|
|
|
1
1
|
export default class MorphMap {
|
|
2
|
-
|
|
2
|
+
_map = {};
|
|
3
|
+
static _instance;
|
|
4
|
+
static create() {
|
|
5
|
+
if (this._instance) {
|
|
6
|
+
return this._instance;
|
|
7
|
+
}
|
|
8
|
+
return new MorphMap();
|
|
9
|
+
}
|
|
3
10
|
set(alias, target) {
|
|
4
|
-
this.
|
|
11
|
+
this._map[alias] = target;
|
|
5
12
|
}
|
|
6
13
|
get(alias) {
|
|
7
|
-
if (!(alias in this.
|
|
14
|
+
if (!(alias in this._map)) {
|
|
8
15
|
throw new Error('morph map not found for ' + alias);
|
|
9
16
|
}
|
|
10
|
-
return this.
|
|
17
|
+
return this._map[alias] || null;
|
|
11
18
|
}
|
|
12
19
|
has(alias) {
|
|
13
|
-
return alias in this.
|
|
20
|
+
return alias in this._map;
|
|
14
21
|
}
|
|
15
22
|
hasTarget(target) {
|
|
16
|
-
const keys = Object.keys(this.
|
|
23
|
+
const keys = Object.keys(this._map);
|
|
17
24
|
for (const key of keys) {
|
|
18
|
-
if (this.
|
|
25
|
+
if (this._map[key] === target) {
|
|
19
26
|
return true;
|
|
20
27
|
}
|
|
21
28
|
}
|
|
22
29
|
return false;
|
|
23
30
|
}
|
|
24
31
|
getAlias(target) {
|
|
25
|
-
const keys = Object.keys(this.
|
|
32
|
+
const keys = Object.keys(this._map);
|
|
26
33
|
for (const key of keys) {
|
|
27
|
-
if (target instanceof this.
|
|
34
|
+
if (target instanceof this._map[key] || target === this._map[key]) {
|
|
28
35
|
return key;
|
|
29
36
|
}
|
|
30
37
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { AclModel } from '../types.js';
|
|
2
|
-
export declare function morphMap(): Promise<import("../morph_map.js").default>;
|
|
1
|
+
import { AclModel, MorphInterface } from '../types.js';
|
|
3
2
|
export declare function formatList(models: (string | number | any)[]): {
|
|
4
3
|
slugs: string[];
|
|
5
4
|
ids: number[];
|
|
@@ -12,7 +11,7 @@ export declare function formatStringNumbers(models: string | number | any): {
|
|
|
12
11
|
slugs: string[];
|
|
13
12
|
ids: number[];
|
|
14
13
|
};
|
|
15
|
-
export declare function destructTarget(target?: AclModel | Function): Promise<{
|
|
14
|
+
export declare function destructTarget(map: MorphInterface, target?: AclModel | Function): Promise<{
|
|
16
15
|
targetClass: null;
|
|
17
16
|
targetId: null;
|
|
18
17
|
} | {
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import app from '@adonisjs/core/services/app';
|
|
2
|
-
export async function morphMap() {
|
|
3
|
-
const map = await app.container.make('morphMap');
|
|
4
|
-
return map;
|
|
5
|
-
}
|
|
6
1
|
export function formatList(models) {
|
|
7
2
|
let slugs = [];
|
|
8
3
|
let ids = [];
|
|
@@ -51,14 +46,13 @@ export function formatStringNumbers(models) {
|
|
|
51
46
|
}
|
|
52
47
|
return { slugs, ids };
|
|
53
48
|
}
|
|
54
|
-
export async function destructTarget(target) {
|
|
49
|
+
export async function destructTarget(map, target) {
|
|
55
50
|
if (!target) {
|
|
56
51
|
return {
|
|
57
52
|
targetClass: null,
|
|
58
53
|
targetId: null,
|
|
59
54
|
};
|
|
60
55
|
}
|
|
61
|
-
const map = await morphMap();
|
|
62
56
|
return {
|
|
63
57
|
targetClass: map.getAlias(target),
|
|
64
58
|
targetId: isAclModelInterface(target) ? target.getModelId() : null,
|
|
@@ -1,48 +1,50 @@
|
|
|
1
|
-
import
|
|
2
|
-
import Role from '../models/role.js';
|
|
3
|
-
import { AclModel } from '../types.js';
|
|
1
|
+
import { AclModel, MorphInterface, PermissionInterface, RoleInterface } from '../types.js';
|
|
4
2
|
import PermissionsService from './permissions/permissions_service.js';
|
|
5
3
|
import RolesService from './roles/roles_service.js';
|
|
6
4
|
export declare class ModelHasRolePermissions {
|
|
7
5
|
private model;
|
|
8
6
|
private roleService;
|
|
9
7
|
private permissionsService;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
8
|
+
private map;
|
|
9
|
+
constructor(model: AclModel, roleService: RolesService, permissionsService: PermissionsService, map: MorphInterface);
|
|
10
|
+
roles(): Promise<import("../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
11
|
+
hasRole(role: string | RoleInterface): Promise<boolean>;
|
|
12
|
+
hasAllRoles(...roles: (string | RoleInterface)[]): Promise<boolean>;
|
|
13
|
+
hasAnyRole(...roles: (string | RoleInterface)[]): Promise<boolean>;
|
|
14
|
+
assignRole(role: string | RoleInterface): Promise<boolean>;
|
|
15
|
+
assignAllRoles(...roles: (string | RoleInterface)[]): Promise<boolean>;
|
|
16
|
+
revokeRole(role: string | number | RoleInterface): Promise<boolean>;
|
|
17
|
+
revokeAllRoles(...roles: (string | number | RoleInterface)[]): Promise<boolean>;
|
|
18
|
+
flushRoles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, any>;
|
|
19
|
+
permissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
20
|
+
globalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
21
|
+
onResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
22
|
+
directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
23
|
+
directResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
|
|
24
|
+
containsPermission(permission: string | PermissionInterface): Promise<boolean>;
|
|
25
|
+
containsAllPermissions(permissions: (string | PermissionInterface)[]): Promise<boolean>;
|
|
26
|
+
containsAnyPermission(permissions: (string | PermissionInterface)[]): Promise<boolean>;
|
|
27
|
+
containsDirectPermission(permission: string | PermissionInterface): Promise<boolean>;
|
|
28
|
+
containsAllPermissionsDirectly(permissions: (string | PermissionInterface)[]): Promise<boolean>;
|
|
29
|
+
containsAnyPermissionDirectly(permissions: (string | PermissionInterface)[]): Promise<boolean>;
|
|
30
|
+
hasPermission(permission: string | PermissionInterface, target?: AclModel | Function): Promise<boolean>;
|
|
31
|
+
hasAllPermissions(permissions: (string | PermissionInterface)[], target?: AclModel | Function): Promise<boolean>;
|
|
32
|
+
hasAnyPermission(permissions: (string | PermissionInterface)[], target?: AclModel | Function): Promise<boolean>;
|
|
33
|
+
hasAnyDirectPermission(permissions: (string | PermissionInterface)[], target?: AclModel | Function): Promise<boolean>;
|
|
34
|
+
hasDirectPermission(permission: string | PermissionInterface, target?: AclModel | Function): Promise<boolean>;
|
|
35
|
+
hasAllPermissionsDirect(permissions: (string | PermissionInterface)[], target?: AclModel | Function): Promise<boolean>;
|
|
36
|
+
can(permission: string | PermissionInterface, target?: AclModel | Function): Promise<boolean>;
|
|
37
|
+
canAll(permissions: (string | PermissionInterface)[], target?: AclModel | Function): Promise<boolean>;
|
|
38
|
+
canAny(permissions: (string | PermissionInterface)[], target?: AclModel | Function): Promise<boolean>;
|
|
39
|
+
assignDirectPermission(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
40
|
+
assignDirectAllPermissions(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
41
|
+
allow(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
42
|
+
revokePermission(permission: string, target?: AclModel | Function): Promise<any[]>;
|
|
43
|
+
revokeAllPermissions(permissions: string[], target?: AclModel | Function): Promise<any[]>;
|
|
42
44
|
flushPermissions(): Promise<any[]>;
|
|
43
45
|
flush(): Promise<boolean>;
|
|
44
|
-
forbid(
|
|
45
|
-
forbidAll(
|
|
46
|
-
unforbidAll(
|
|
47
|
-
unforbid(
|
|
46
|
+
forbid(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
47
|
+
forbidAll(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
|
|
48
|
+
unforbidAll(permissions: string[], target?: AclModel | Function): Promise<any[]>;
|
|
49
|
+
unforbid(permission: string, target?: AclModel | Function): Promise<any[]>;
|
|
48
50
|
}
|