@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.
Files changed (46) hide show
  1. package/README.md +160 -59
  2. package/build/index.d.ts +10 -4
  3. package/build/index.js +10 -5
  4. package/build/providers/role_permission_provider.d.ts +3 -0
  5. package/build/providers/role_permission_provider.js +21 -0
  6. package/build/src/acl.d.ts +10 -5
  7. package/build/src/acl.js +17 -9
  8. package/build/src/decorators.js +1 -0
  9. package/build/src/mixins/has_permissions.d.ts +58 -26
  10. package/build/src/mixins/has_permissions.js +123 -18
  11. package/build/src/model_manager.d.ts +7 -0
  12. package/build/src/model_manager.js +15 -0
  13. package/build/src/models/permission.d.ts +4 -4
  14. package/build/src/models/permission.js +2 -7
  15. package/build/src/models/role.d.ts +1 -1
  16. package/build/src/models/role.js +2 -7
  17. package/build/src/morph_map.d.ts +5 -2
  18. package/build/src/morph_map.js +16 -9
  19. package/build/src/services/helper.d.ts +2 -3
  20. package/build/src/services/helper.js +1 -7
  21. package/build/src/services/model_has_role_permissions.d.ts +41 -39
  22. package/build/src/services/model_has_role_permissions.js +92 -111
  23. package/build/src/services/model_service.d.ts +15 -6
  24. package/build/src/services/model_service.js +39 -14
  25. package/build/src/services/permissions/empty_permission.d.ts +8 -0
  26. package/build/src/services/permissions/empty_permission.js +17 -0
  27. package/build/src/services/permissions/permission_has_model_roles.d.ts +12 -8
  28. package/build/src/services/permissions/permission_has_model_roles.js +28 -19
  29. package/build/src/services/permissions/permissions_service.d.ts +42 -30
  30. package/build/src/services/permissions/permissions_service.js +188 -155
  31. package/build/src/services/query_helper.d.ts +7 -0
  32. package/build/src/services/query_helper.js +12 -0
  33. package/build/src/services/roles/empty_roles.d.ts +8 -0
  34. package/build/src/services/roles/empty_roles.js +17 -0
  35. package/build/src/services/roles/role_has_model_permissions.d.ts +32 -33
  36. package/build/src/services/roles/role_has_model_permissions.js +64 -78
  37. package/build/src/services/roles/roles_service.d.ts +20 -9
  38. package/build/src/services/roles/roles_service.js +83 -30
  39. package/build/src/types.d.ts +65 -5
  40. package/build/stubs/configs/permissions.stub +1 -1
  41. package/build/stubs/migrations/create_db.stub +8 -8
  42. package/package.json +3 -1
  43. package/build/src/mixins/has_role_permissions.d.ts +0 -128
  44. package/build/src/mixins/has_role_permissions.js +0 -10
  45. package/build/src/mixins/has_roles.d.ts +0 -1
  46. 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
- declare const _default: <Model extends NormalizeConstructor<import("@adonisjs/lucid/types/model").LucidModel>>(superclass: Model) => {
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
- * return all permissions including global, direct
9
- */
10
- permissions(): Promise<Permission[] | null>;
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: <T_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_1, 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_1> | null;
91
- $createMultipleFromAdapterResult: <T_2 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_2, 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_2>[];
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: <T_3 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_3, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_3>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_3>>;
116
- createMany: <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>[]>;
117
- findOrFail: <T_5 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_5, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_5>>;
118
- findBy: <T_6 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_6, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_6> | null>;
119
- findByOrFail: <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>>;
120
- first: <T_8 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_8, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_8> | null>;
121
- firstOrFail: <T_9 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_9, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_9>>;
122
- findMany: <T_10 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_10, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_10>[]>;
123
- firstOrNew: <T_11 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_11, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_11>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_11>>> | undefined, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_11>>;
124
- firstOrCreate: <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>>;
125
- updateOrCreate: <T_13 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_13, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_13>>>, updatePayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_13>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_13>>;
126
- fetchOrNewUpMany: <T_14 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_14, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_14>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_14>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_14>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_14>[]>;
127
- fetchOrCreateMany: <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>[]>;
128
- updateOrCreateMany: <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>[]>;
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 PermissionsService from '../services/permissions/permissions_service.js';
2
- export default (superclass) => {
3
- class HasPermissionsMixin extends superclass {
4
- getMorphMapName() {
5
- throw new Error('method getMorphMapName must be implemented in target model, which will return string alias for model class');
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
- getModelId() {
8
- throw new Error('method getModelId must be implemented in target model, which will return key for current object');
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 { AclModelInterface } from '../types.js';
4
- export default class Permission extends BaseModel implements AclModelInterface {
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 | null;
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
- import { MorphMap } from '../decorators.js';
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;
@@ -6,7 +6,7 @@ export default class Role extends BaseModel implements AclModelInterface {
6
6
  getModelId(): number;
7
7
  id: number;
8
8
  slug: string;
9
- title: string;
9
+ title: string | null;
10
10
  entityType: string;
11
11
  entityId: number | null;
12
12
  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
- import { MorphMap } from '../decorators.js';
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;
@@ -1,5 +1,8 @@
1
- export default class MorphMap {
2
- private map;
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;
@@ -1,30 +1,37 @@
1
1
  export default class MorphMap {
2
- map = {};
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.map[alias] = target;
11
+ this._map[alias] = target;
5
12
  }
6
13
  get(alias) {
7
- if (!(alias in this.map)) {
14
+ if (!(alias in this._map)) {
8
15
  throw new Error('morph map not found for ' + alias);
9
16
  }
10
- return this.map[alias] || null;
17
+ return this._map[alias] || null;
11
18
  }
12
19
  has(alias) {
13
- return alias in this.map;
20
+ return alias in this._map;
14
21
  }
15
22
  hasTarget(target) {
16
- const keys = Object.keys(this.map);
23
+ const keys = Object.keys(this._map);
17
24
  for (const key of keys) {
18
- if (this.map[key] === target) {
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.map);
32
+ const keys = Object.keys(this._map);
26
33
  for (const key of keys) {
27
- if (target instanceof this.map[key] || target === this.map[key]) {
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 Permission from '../models/permission.js';
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
- constructor(model: AclModel, roleService: RolesService, permissionsService: PermissionsService);
11
- roles(): Promise<Role[]>;
12
- hasRole(role: string | Role): Promise<boolean>;
13
- hasAllRoles(roles: (string | Role)[]): Promise<boolean>;
14
- hasAnyRole(roles: (string | Role)[]): Promise<boolean>;
15
- assignRole(role: string | Role): Promise<boolean>;
16
- revokeRole(role: string | number | Role): Promise<boolean>;
17
- revokeAllRoles(roles: (string | number | Role)[]): Promise<boolean>;
18
- permissions(includeForbiddens?: boolean): Promise<Permission[]>;
19
- globalPermissions(includeForbiddens?: boolean): Promise<Permission[]>;
20
- onResourcePermissions(includeForbiddens?: boolean): Promise<Permission[]>;
21
- directGlobalPermissions(includeForbiddens?: boolean): Promise<Permission[]>;
22
- directResourcePermissions(includeForbiddens?: boolean): Promise<Permission[]>;
23
- containsPermission(permisison: string | Permission): Promise<boolean>;
24
- containsAllPermissions(permisisons: (string | Permission)[]): Promise<boolean>;
25
- containsAnyPermission(permisisons: (string | Permission)[]): Promise<boolean>;
26
- containsDirectPermission(permisison: string | Permission): Promise<boolean>;
27
- containsAllPermissionsDirectly(permisisons: (string | Permission)[]): Promise<boolean>;
28
- containsAnyPermissionDirectly(permisisons: (string | Permission)[]): Promise<boolean>;
29
- hasPermission(permisison: string | Permission, target?: AclModel | Function): Promise<boolean>;
30
- hasAllPermissions(permisisons: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
31
- hasAnyPermission(permisisons: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
32
- hasAnyDirectPermission(permisisons: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
33
- hasDirectPermission(permisison: string | Permission, target?: AclModel | Function): Promise<boolean>;
34
- hasAllPermissionsDirect(permisisons: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
35
- can(permisison: string | Permission, target?: AclModel | Function): Promise<boolean>;
36
- canAll(permisisons: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
37
- canAny(permisisons: (string | Permission)[], target?: AclModel | Function): Promise<boolean>;
38
- assignDirectPermission(permisison: string, target?: AclModel | Function): Promise<import("../models/model_permission.js").default[]>;
39
- allow(permisison: string, target?: AclModel | Function): Promise<import("../models/model_permission.js").default[]>;
40
- revokePermission(permisison: string, target?: AclModel | Function): Promise<import("../models/model_permission.js").default[]>;
41
- revokeAllPermissions(permisisons: string[], target?: AclModel | Function): Promise<import("../models/model_permission.js").default[]>;
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(permisison: string, target?: AclModel | Function): Promise<import("../models/model_permission.js").default[]>;
45
- forbidAll(permisisons: string[], target?: AclModel | Function): Promise<import("../models/model_permission.js").default[]>;
46
- unforbidAll(permisisons: string[], target?: AclModel | Function): Promise<any[]>;
47
- unforbid(permisison: string, target?: AclModel | Function): Promise<any[]>;
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
  }