@holoyan/adonisjs-permissions 0.8.21 → 0.8.23

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 CHANGED
@@ -3,6 +3,11 @@
3
3
  [//]: # ([![test](https://github.com/holoyan/adonisjs-permissions/actions/workflows/test.yml/badge.svg)](https://github.com/holoyan/adonisjs-permissions/actions/workflows/test.yml))
4
4
  [![license](https://poser.pugx.org/silber/bouncer/license.svg)](https://github.com/holoyan/adonisjs-permissions/blob/master/LICENSE.md)
5
5
 
6
+ ## How can you support me?
7
+
8
+ - It's simple, just star this repository, that is enough to keep me motivated to maintain this package.
9
+
10
+
6
11
  ## Table of Contents
7
12
 
8
13
  <details><summary>Click to expand</summary><p>
@@ -128,7 +133,7 @@ export default class Post extends BaseModel implements AclModelInterface {
128
133
  ## Release Notes
129
134
 
130
135
  Version: >= 'v0.8.21'
131
- * Update: UUID version to ^10.0.0
136
+ * Added `sync` methods
132
137
 
133
138
  ## Mixins
134
139
 
@@ -984,7 +989,144 @@ await trx.commit()
984
989
 
985
990
  ## Cheat sheet
986
991
 
987
- Coming soon
992
+ Model methods
993
+ ```typescript
994
+ // getting model roles
995
+ await Acl.model(user).roles()
996
+
997
+ // Checking the current model's roles
998
+ await Acl.model(user).hasRole('role_slug')
999
+ await Acl.model(user).hasAllRoles('role_slug1', 'role_slug2')
1000
+ await Acl.model(user).hasAnyRole('role_slug1', 'role_slug2')
1001
+
1002
+ // assigning roles
1003
+ await Acl.model(user).assignRole('role_slug')
1004
+ await Acl.model(user).assign('role_slug') // alias for assignRole()
1005
+ await Acl.model(user).assignAllRoles('role_slug1', 'role_slug2')
1006
+
1007
+ // revoking roles
1008
+ await Acl.model(user).revokeRole('role_slug')
1009
+ await Acl.model(user).revokeAllRoles('role_slug1', 'role_slug2')
1010
+ await Acl.model(user).flushRoles() // remove all roles
1011
+
1012
+ // syncing roles
1013
+ await Acl.model(user).syncRoles(['role_slug1', 'role_slug2']) // remove all roles and assign new
1014
+ await Acl.model(user).syncRolesWithoutDetaching(['role_slug1', 'role_slug2') // assign new roles without removing old
1015
+
1016
+
1017
+ // getting model permissions
1018
+
1019
+ await Acl.model(user).permissions()
1020
+ await Acl.model(user).globalPermissions() // get list of global permissions
1021
+ await Acl.mode(user).onResourcePermissions() // get list of on resrouce permissions
1022
+ await Acl.model(user).directPermissions() // list of permissions assigned to the user drectly
1023
+ await Acl.model(user).rolePermissions() // Get permissions through roles
1024
+ await Acl.model(user).directGlobalPermissions()
1025
+ await Acl.model(user).directResourcePermissions()
1026
+
1027
+ // checking for permission
1028
+ await Acl.model(user).hasPermission(permission)
1029
+ await Acl.model(user).hasAllPermissions([permission1, permission2])
1030
+ await Acl.model(user).hasAnyPermission([permission1, permission2])
1031
+ await Acl.model(user).hasAnyDirectPermission([permission1, permission2])
1032
+ await Acl.model(user).hasDirectPermission(permission1)
1033
+ await Acl.model(user).hasAllPermissionsDirect([permission1, permission2])
1034
+ await Acl.model(user).can(permission1) // alias for hasPermission()
1035
+ await Acl.model(user).canAll([permission1, permission2])
1036
+ await Acl.model(user).canAny([permission1, permission2])
1037
+
1038
+ // check Contains vs hasPermission section to see the diferrence
1039
+ await Acl.model(user).containsPermission(permission)
1040
+ await Acl.model(user).contains(permission) // alias for containsPermission
1041
+ await Acl.model(user).containsAllPermissions([permission1])
1042
+ await Acl.model(user).containsAnyPermission([permission1])
1043
+ await Acl.model(user).containsDirectPermission([permission1])
1044
+ await Acl.model(user).containsAllPermissionsDirectly([permission1])
1045
+ await Acl.model(user).containsAnyPermissionDirectly([permission1])
1046
+
1047
+ // assigning permissions
1048
+ await Acl.model(user).assignDirectPermission(permission)
1049
+ await Acl.model(user).assignDirectAllPermissions([permission1, permission2])
1050
+ await Acl.model(user).allow(permission1) // alias for assignDirectPermission()
1051
+ await Acl.model(user).allowAll([permission1, permission2])
1052
+
1053
+ // reviking permissions
1054
+ await Acl.model(user).revokePermission(permission1)
1055
+ await Acl.model(user).revoke(permission1) // alias for revokePermission()
1056
+ await Acl.model(user).revokeAllPermissions([permission1, permission2])
1057
+ await Acl.model(user).revokeAll([permission1, permission2]) // alias for revokeAllPermissions()
1058
+ await Acl.model(user).flushPermissions() // revoke/delete all direct assigned permissions
1059
+ await Acl.model(user).flush() // revoke/delete all assigned roles and permissions
1060
+
1061
+ // sync permissions
1062
+ await Acl.model(user).syncPermissions([permission1, permission2]) // all direct assigned permissions will be revoked and only permission1, permission2 will be assigned
1063
+
1064
+ // forbid/unforbiding permissions
1065
+ await Acl.model(user).forbid(permission1)
1066
+ await Acl.model(user).forbidAll([permission1, permission2])
1067
+ await Acl.model(user).unforbid(permission1)
1068
+ await Acl.model(user).unforbidAll([permission1, permission2])
1069
+
1070
+ ```
1071
+
1072
+ Role methods
1073
+
1074
+ ```typescript
1075
+
1076
+ await Acl.role(myAdminRole).models() // get list of models assigned to the role
1077
+ await Acl.role(myAdminRole).modelsFor('ALIAS_FOR_MODEL')
1078
+
1079
+ await Acl.role(myAdminRole).permissions()
1080
+ await Acl.role(myAdminRole).globalPermissions()
1081
+ await Acl.role(myAdminRole).onResourcePermissions()
1082
+
1083
+ // checking for a permissions
1084
+ await Acl.role(myAdminRole).hasPermission(permission)
1085
+ await Acl.role(myAdminRole).hasAllPermissions([permission1, permission2])
1086
+ await Acl.role(myAdminRole).hasAnyPermissions([permission1, permission2])
1087
+ await Acl.role(myAdminRole).can(permission) // alias for hasPermission
1088
+ await Acl.role(myAdminRole).canAll([permission1, permission2])
1089
+ await Acl.role(myAdminRole).canAny([permission1, permission2])
1090
+
1091
+ await Acl.role(myAdminRole).containsPermission(permission)
1092
+ await Acl.role(myAdminRole).containsAllPermissions([permission1, permission2])
1093
+ await Acl.role(myAdminRole).containsAnyPermissions([permission1, permission2])
1094
+ await Acl.role(myAdminRole).forbidden(permission) // check if permission forbidden for a role
1095
+
1096
+ // assigning permission
1097
+ await Acl.role(myAdminRole).give(permission)
1098
+ await Acl.role(myAdminRole).assign(permission) // alias for give()
1099
+ await Acl.role(myAdminRole).allow(permission) // alias for give()
1100
+
1101
+ await Acl.role(myAdminRole).giveAll([permission1])
1102
+ await Acl.role(myAdminRole).assignAll([permission1])
1103
+ await Acl.role(myAdminRole).allowAll([permission1])
1104
+
1105
+ // revoking permission
1106
+ await Acl.role(myAdminRole).revokePermission(permission1)
1107
+ await Acl.role(myAdminRole).revoke(permission1) // alias for revokePermission()
1108
+ await Acl.role(myAdminRole).revokeAllPermissions([permission1])
1109
+ await Acl.role(myAdminRole).revokeAll([permission1]) // alias for revokeAllPermissions()
1110
+ await Acl.role(myAdminRole).flush() // revoke all
1111
+
1112
+ await Acl.role(myAdminRole).sync([permission1, permission2]) // revoke all and assign only permission1, permission2
1113
+
1114
+ // forbid/unforbid
1115
+
1116
+ await Acl.role(myAdminRole).forbid(permission)
1117
+ await Acl.role(myAdminRole).unforbid(permission)
1118
+
1119
+ ```
1120
+
1121
+ Permission methods
1122
+ ```typescript
1123
+ await Acl.permission(myPermission).roles() // list of roles
1124
+ await Acl.permission(myPermission).modelsFor('MODEL_ALIAS')
1125
+ await Acl.permission(myPermission).belongsToRole(role_slug) // check if permission belongs to role
1126
+ await Acl.permission(myPermission).attachToRole(role_slug)
1127
+ await Acl.permission(myPermission).detachFromRole(role_slug)
1128
+
1129
+ ```
988
1130
 
989
1131
 
990
1132
  ## TODO
@@ -1,5 +1,5 @@
1
1
  import { RoleHasModelPermissions } from './services/roles/role_has_model_permissions.js';
2
- import { ModelHasRolePermissions } from './services/model_has_role_permissions.js';
2
+ import { ModelHasRolePermissions } from './services/models/model_has_role_permissions.js';
3
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';
package/build/src/acl.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { RoleHasModelPermissions } from './services/roles/role_has_model_permissions.js';
2
- import { ModelHasRolePermissions } from './services/model_has_role_permissions.js';
2
+ import { ModelHasRolePermissions } from './services/models/model_has_role_permissions.js';
3
3
  import PermissionHasModelRoles from './services/permissions/permission_has_model_roles.js';
4
4
  import ModelManager from './model_manager.js';
5
5
  import EmptyPermission from './services/permissions/empty_permission.js';
@@ -1,4 +1,6 @@
1
- export declare function MorphMap(param: string): <T extends new (...args: any[]) => {}>(target: T) => void;
1
+ export declare function MorphMap(param: string): <T extends {
2
+ new (...args: any[]): {};
3
+ }>(target: T) => void;
2
4
  export declare function getClassPath<T extends {
3
5
  new (...args: any[]): {};
4
6
  }>(clazz: T): string;
@@ -1,43 +1,214 @@
1
1
  import type { NormalizeConstructor } from '@adonisjs/core/types/helpers';
2
+ import { BaseModel } from '@adonisjs/lucid/orm';
2
3
  import { AclModel, ModelIdType } from '../types.js';
3
- export declare function hasPermissions(): <Model extends NormalizeConstructor<import("@adonisjs/lucid/types/model").LucidModel>>(superclass: Model) => {
4
+ export declare function hasPermissions(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => {
4
5
  new (...args: any[]): {
5
6
  getModelId(): ModelIdType;
7
+ /**
8
+ * returns list of roles assigned to the model
9
+ */
6
10
  roles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
11
+ /**
12
+ * Check if model has role
13
+ * @param role
14
+ */
7
15
  hasRole(role: string): Promise<boolean>;
16
+ /**
17
+ * Check if model has all roles - returns true ONLY, if model has all roles
18
+ * @param roles
19
+ */
8
20
  hasAllRoles(...roles: string[]): Promise<boolean>;
21
+ /**
22
+ * Check if model has any role - returns true if model has any of the roles
23
+ * @param roles
24
+ */
9
25
  hasAnyRole(...roles: string[]): Promise<boolean>;
26
+ /**
27
+ * Assign role to model
28
+ * @param role
29
+ */
10
30
  assignRole(role: string): Promise<boolean>;
31
+ /**
32
+ * Revoke role from model
33
+ * @param role
34
+ */
11
35
  revokeRole(role: string): Promise<boolean>;
36
+ /**
37
+ * Revoke all roles from model
38
+ * @param roles
39
+ */
12
40
  revokeAllRoles(...roles: string[]): Promise<boolean>;
41
+ /**
42
+ * returns list of permissions assigned to the model
43
+ * @param includeForbiddings
44
+ */
13
45
  permissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
46
+ /**
47
+ * returns list of global permissions assigned to the model
48
+ * @param includeForbiddings
49
+ */
14
50
  globalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
51
+ /**
52
+ * returns list of resource permissions assigned to the model
53
+ * @param includeForbiddings
54
+ */
15
55
  onResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
56
+ /**
57
+ * Returns list of direct permissions assigned to the model
58
+ * @param includeForbiddings
59
+ */
16
60
  directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
61
+ /**
62
+ * Returns list of direct resource permissions assigned to the model
63
+ * @param includeForbiddings
64
+ */
17
65
  directResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
66
+ /**
67
+ * Check if model has "contains" permission
68
+ * If permission is forbidden, it will return true
69
+ * @param permission
70
+ */
18
71
  containsPermission(permission: string): Promise<boolean>;
72
+ /**
73
+ * Check if model contains all permissions
74
+ * @param permissions
75
+ */
19
76
  containsAllPermissions(permissions: string[]): Promise<boolean>;
77
+ /**
78
+ * Check if model contains any permission
79
+ * @param permissions
80
+ */
20
81
  containsAnyPermission(permissions: string[]): Promise<boolean>;
82
+ /**
83
+ * Check if model contains direct permission
84
+ * @param permission
85
+ */
21
86
  containsDirectPermission(permission: string): Promise<boolean>;
87
+ /**
88
+ * Check if model contains all direct permissions
89
+ * @param permissions
90
+ */
22
91
  containsAllPermissionsDirectly(permissions: string[]): Promise<boolean>;
92
+ /**
93
+ * Check if model contains any direct permission
94
+ * @param permissions
95
+ */
23
96
  containsAnyPermissionDirectly(permissions: string[]): Promise<boolean>;
97
+ /**
98
+ * Check if model has permission
99
+ * @param permission
100
+ * @param target
101
+ */
24
102
  hasPermission(permission: string, target?: AclModel | Function): Promise<boolean>;
103
+ /**
104
+ * Check if model has all permissions
105
+ * @param permissions
106
+ * @param target
107
+ */
25
108
  hasAllPermissions(permissions: string[], target?: AclModel | Function): Promise<boolean>;
109
+ /**
110
+ * Check if model has any permission
111
+ * @param permissions
112
+ * @param target
113
+ */
26
114
  hasAnyPermission(permissions: string[], target?: AclModel | Function): Promise<boolean>;
115
+ /**
116
+ * Check if model has direct permission
117
+ * @param permissions
118
+ * @param target
119
+ */
27
120
  hasAnyDirectPermission(permissions: string[], target?: AclModel | Function): Promise<boolean>;
121
+ /**
122
+ * Check if model has direct permission
123
+ * @param permission
124
+ * @param target
125
+ */
28
126
  hasDirectPermission(permission: string, target?: AclModel | Function): Promise<boolean>;
127
+ /**
128
+ * Check if model has all direct permissions
129
+ * @param permissions
130
+ * @param target
131
+ */
29
132
  hasAllPermissionsDirect(permissions: string[], target?: AclModel | Function): Promise<boolean>;
133
+ /**
134
+ * Check if model has all permission
135
+ * @param permissions
136
+ * @param target
137
+ */
30
138
  canAll(permissions: string[], target?: AclModel | Function): Promise<boolean>;
31
139
  canAny(permissions: string[], target?: AclModel | Function): Promise<boolean>;
140
+ /**
141
+ * Check if model has any permission
142
+ * @param permission
143
+ * @param target
144
+ */
32
145
  assignDirectPermission(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
146
+ /**
147
+ * Allow permission for model
148
+ * @param permission
149
+ * @param target
150
+ */
33
151
  allow(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
152
+ /**
153
+ * Revoke permission from model
154
+ * @param permission
155
+ * @param target
156
+ */
34
157
  revokePermission(permission: string, target?: AclModel | Function): Promise<any[]>;
158
+ /**
159
+ * Revoke all permissions from model
160
+ * @param permissions
161
+ * @param target
162
+ */
35
163
  revokeAllPermissions(permissions: string[], target?: AclModel | Function): Promise<any[]>;
164
+ /**
165
+ * Flush(revoke all) permissions from model
166
+ */
36
167
  flushPermissions(): Promise<any[]>;
168
+ /**
169
+ * Flush(revoke all) roles and permissions from model
170
+ */
37
171
  flush(): Promise<boolean>;
172
+ /**
173
+ * Sync Role with the given list
174
+ * @param roles
175
+ * @param detach
176
+ */
177
+ syncRoles(roles: string[], detach?: boolean): Promise<boolean>;
178
+ /**
179
+ * Sync Role with the given list without detaching existing roles
180
+ * @param roles
181
+ */
182
+ syncRolesWithoutDetaching(roles: string[]): Promise<boolean>;
183
+ /**
184
+ * Sync permissions with the given list
185
+ * @param permissions
186
+ * @param target
187
+ */
188
+ syncPermissions(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
189
+ /**
190
+ * Forbid permission for model
191
+ * @param permission
192
+ * @param target
193
+ */
38
194
  forbid(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
195
+ /**
196
+ * Forbid all permissions for model
197
+ * @param permissions
198
+ * @param target
199
+ */
39
200
  forbidAll(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
201
+ /**
202
+ * Unforbid all permissions for model
203
+ * @param permissions
204
+ * @param target
205
+ */
40
206
  unforbidAll(permissions: string[], target?: AclModel | Function): Promise<any[]>;
207
+ /**
208
+ * Unforbid permission for model
209
+ * @param permission
210
+ * @param target
211
+ */
41
212
  unforbid(permission: string, target?: AclModel | Function): Promise<any[]>;
42
213
  $attributes: import("@adonisjs/lucid/types/model").ModelObject;
43
214
  $extras: import("@adonisjs/lucid/types/model").ModelObject;
@@ -47,59 +218,56 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<im
47
218
  };
48
219
  $columns: undefined;
49
220
  $sideloaded: import("@adonisjs/lucid/types/model").ModelObject;
50
- $primaryKeyValue?: string | number | undefined;
221
+ $primaryKeyValue?: number | string;
51
222
  $isPersisted: boolean;
52
223
  $isNew: boolean;
53
224
  $isLocal: boolean;
54
225
  $dirty: import("@adonisjs/lucid/types/model").ModelObject;
55
226
  $isDirty: boolean;
56
227
  $isDeleted: boolean;
57
- $options?: import("@adonisjs/lucid/types/model").ModelOptions | undefined;
58
- $trx?: import("@adonisjs/lucid/types/database").TransactionClientContract | undefined;
59
- $setOptionsAndTrx(options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined): void;
60
- useTransaction(trx: import("@adonisjs/lucid/types/database").TransactionClientContract): any;
61
- useConnection(connection: string): any;
62
- $getQueryFor(action: "insert", client: import("@adonisjs/lucid/types/database").QueryClientContract): import("@adonisjs/lucid/types/querybuilder").InsertQueryBuilderContract<unknown[]>;
63
- $getQueryFor(action: "delete" | "refresh" | "update", client: import("@adonisjs/lucid/types/database").QueryClientContract): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidRow>;
228
+ $options?: import("@adonisjs/lucid/types/model").ModelOptions;
229
+ $trx?: import("@adonisjs/lucid/types/database").TransactionClientContract;
230
+ $setOptionsAndTrx(options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): void;
231
+ useTransaction(trx: import("@adonisjs/lucid/types/database").TransactionClientContract): /*elided*/ any;
232
+ useConnection(connection: string): /*elided*/ any;
233
+ $getQueryFor(action: "insert", client: import("@adonisjs/lucid/types/database").QueryClientContract): ReturnType<import("@adonisjs/lucid/types/database").QueryClientContract["insertQuery"]>;
234
+ $getQueryFor(action: "update" | "delete" | "refresh", client: import("@adonisjs/lucid/types/database").QueryClientContract): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel>;
64
235
  $setAttribute(key: string, value: any): void;
65
236
  $getAttribute(key: string): any;
66
- $getAttributeFromCache(key: string, callback: (value: any) => any): any;
237
+ $getAttributeFromCache(key: string, callback: import("@adonisjs/lucid/types/model").CacheNode["getter"]): any;
67
238
  $hasRelated(key: string): boolean;
68
239
  $setRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | null): void;
69
240
  $pushRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | null): void;
70
- $getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | null | undefined;
71
- $consumeAdapterResult(adapterResult: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject | undefined): void;
241
+ $getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | undefined | null;
242
+ $consumeAdapterResult(adapterResult: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject): void;
72
243
  $hydrateOriginals(): void;
73
- fill(value: Partial<{}>, allowExtraProperties?: boolean | undefined): any;
74
- merge(value: Partial<{}>, allowExtraProperties?: boolean | undefined): any;
75
- enableForceUpdate(): any;
76
- save(): Promise<any>;
77
- lockForUpdate<T>(callback: (user: any) => T | Promise<T>): Promise<T>;
244
+ fill(value: Partial<{}>, allowExtraProperties?: boolean): /*elided*/ any;
245
+ merge(value: Partial<{}>, allowExtraProperties?: boolean): /*elided*/ any;
246
+ isDirty(fields?: undefined[] | undefined): boolean;
247
+ enableForceUpdate(): /*elided*/ any;
248
+ save(): Promise</*elided*/ any>;
249
+ lockForUpdate<T>(callback: (user: /*elided*/ any) => T | Promise<T>): Promise<T>;
78
250
  delete(): Promise<void>;
79
- refresh(): Promise<any>;
80
- load: import("@adonisjs/lucid/types/model").LucidRowPreload<any>;
81
- loadOnce: import("@adonisjs/lucid/types/model").LucidRowPreloadOnce<any>;
82
- preload: import("@adonisjs/lucid/types/model").LucidRowPreload<any>;
83
- loadAggregate: <Self extends any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = Self[Name] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? Self[Name]["subQuery"] : never>(name: Name, callback: (builder: RelatedBuilder) => void) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
84
- loadCount: <Self_1 extends any, Name_1 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self_1>, RelatedBuilder_1 = Self_1[Name_1] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? Self_1[Name_1]["subQuery"] : never>(name: Name_1, callback?: ((builder: RelatedBuilder_1) => void) | undefined) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self_1>;
85
- serializeAttributes(fields?: import("@adonisjs/lucid/types/model").CherryPickFields | undefined, raw?: boolean | undefined): import("@adonisjs/lucid/types/model").ModelObject;
86
- serializeComputed(fields?: import("@adonisjs/lucid/types/model").CherryPickFields | undefined): import("@adonisjs/lucid/types/model").ModelObject;
251
+ refresh(): Promise</*elided*/ any>;
252
+ load: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
253
+ loadOnce: import("@adonisjs/lucid/types/model").LucidRowPreloadOnce</*elided*/ any>;
254
+ preload: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
255
+ loadAggregate: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = Self[Name] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? Self[Name]["subQuery"] : never>(name: Name, callback: (builder: RelatedBuilder) => void) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
256
+ loadCount: <Self extends /*elided*/ any, Name_1 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder_1 = Self[Name_1] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? Self[Name_1]["subQuery"] : never>(name: Name_1, callback?: ((builder: RelatedBuilder_1) => void) | undefined) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
257
+ serializeAttributes(fields?: import("@adonisjs/lucid/types/model").CherryPickFields, raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
258
+ serializeComputed(fields?: import("@adonisjs/lucid/types/model").CherryPickFields): import("@adonisjs/lucid/types/model").ModelObject;
87
259
  serializeRelations(fields: undefined, raw: true): {
88
260
  [key: string]: import("@adonisjs/lucid/types/model").LucidRow | import("@adonisjs/lucid/types/model").LucidRow[];
89
261
  };
90
- serializeRelations(cherryPick: {
91
- [relation: string]: import("@adonisjs/lucid/types/model").CherryPick;
92
- } | undefined, raw: false | undefined): import("@adonisjs/lucid/types/model").ModelObject;
93
- serializeRelations(cherryPick?: {
94
- [relation: string]: import("@adonisjs/lucid/types/model").CherryPick;
95
- } | undefined, raw?: boolean | undefined): import("@adonisjs/lucid/types/model").ModelObject;
96
- serialize(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick | undefined): import("@adonisjs/lucid/types/model").ModelObject;
262
+ serializeRelations(cherryPick: import("@adonisjs/lucid/types/model").CherryPick["relations"] | undefined, raw: false | undefined): import("@adonisjs/lucid/types/model").ModelObject;
263
+ serializeRelations(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick["relations"], raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
264
+ serialize(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick): import("@adonisjs/lucid/types/model").ModelObject;
97
265
  toObject(): import("@adonisjs/lucid/types/model").ModelObject;
98
266
  toJSON(): import("@adonisjs/lucid/types/model").ModelObject;
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;
267
+ related<Name_2 extends undefined>(relation: Name_2): /*elided*/ any[Name_2] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? /*elided*/ any[Name_2]["client"] : never;
100
268
  };
101
- find: <T_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_1, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_1> | null>;
102
- all: <T_2 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_2, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_2>[]>;
269
+ find: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
270
+ all: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
103
271
  namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract;
104
272
  readonly booted: boolean;
105
273
  $columnsDefinitions: Map<string, import("@adonisjs/lucid/types/model").ModelColumnOptions>;
@@ -120,56 +288,57 @@ export declare function hasPermissions(): <Model extends NormalizeConstructor<im
120
288
  serializedToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
121
289
  serializedToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
122
290
  };
123
- $createFromAdapterResult: <T_3 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_3, 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_3> | null;
124
- $createMultipleFromAdapterResult: <T_4 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_4, 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_4>[];
291
+ $createFromAdapterResult: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, result?: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => null | InstanceType<T>;
292
+ $createMultipleFromAdapterResult: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, results: import("@adonisjs/lucid/types/model").ModelObject[], sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => InstanceType<T>[];
125
293
  $addColumn: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ColumnOptions>) => import("@adonisjs/lucid/types/model").ColumnOptions;
126
294
  $hasColumn: (name: string) => boolean;
127
295
  $getColumn: (name: string) => import("@adonisjs/lucid/types/model").ModelColumnOptions | undefined;
128
296
  $addComputed: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ComputedOptions>) => import("@adonisjs/lucid/types/model").ComputedOptions;
129
297
  $hasComputed: (name: string) => boolean;
130
298
  $getComputed: (name: string) => import("@adonisjs/lucid/types/model").ComputedOptions | undefined;
131
- $addRelation: (name: string, type: "hasOne" | "hasMany" | "belongsTo" | "manyToMany" | "hasManyThrough", relatedModel: () => import("@adonisjs/lucid/types/model").LucidModel, options: import("@adonisjs/lucid/types/model").ModelRelationOptions) => void;
299
+ $addRelation: (name: string, type: import("@adonisjs/lucid/types/relations").ModelRelationTypes["__opaque_type"], relatedModel: () => import("@adonisjs/lucid/types/model").LucidModel, options: import("@adonisjs/lucid/types/model").ModelRelationOptions) => void;
132
300
  $hasRelation: (name: string) => boolean;
133
301
  $getRelation: {
134
- <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Name_3 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<InstanceType<Model_1>>>(this: Model_1, name: Name_3): InstanceType<Model_1>[Name_3] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? InstanceType<Model_1>[Name_3]["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract;
135
- <Model_2 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_2, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
302
+ <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Name_2 extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<InstanceType<Model_1>>>(this: Model_1, name: Name_2): InstanceType<Model_1>[Name_2] extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? InstanceType<Model_1>[Name_2]["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract;
303
+ <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_1, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
136
304
  };
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;
305
+ $defineProperty: <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Prop extends keyof Model_1>(this: Model_1, propertyName: Prop, defaultValue: Model_1[Prop], strategy: "inherit" | "define" | ((value: Model_1[Prop]) => Model_1[Prop])) => void;
138
306
  boot: () => void;
139
307
  before: {
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;
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;
142
- <Model_6 extends import("@adonisjs/lucid/types/model").LucidModel, Event_2 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_6, event: Event_2, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_6>, Event_2>): void;
308
+ <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Event extends "find" | "fetch">(this: Model_1, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_1>, Event>): void;
309
+ <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<[import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_1>, import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_1>], "paginate">): void;
310
+ <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Event_1 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event_1, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event_1>): void;
143
311
  };
144
312
  after: {
145
- <Model_7 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_7, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_7>[], "fetch">): void;
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;
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;
313
+ <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_1, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>[], "fetch">): void;
314
+ <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model_1, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelPaginatorContract<InstanceType<Model_1>>, "paginate">): void;
315
+ <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Event_2 extends import("@adonisjs/lucid/types/model").EventsList>(this: Model_1, event: Event_2, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model_1>, Event_2>): void;
148
316
  };
149
- create: <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>>;
150
- createMany: <T_6 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_6, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_6>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_6>[]>;
151
- findOrFail: <T_7 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_7, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_7>>;
317
+ create: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
318
+ createMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
319
+ findOrFail: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
152
320
  findBy: {
153
- <T_8 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_8, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined): Promise<InstanceType<T_8> | null>;
154
- <T_9 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_9, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined): Promise<InstanceType<T_9> | null>;
321
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T>>;
322
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T>>;
155
323
  };
156
324
  findByOrFail: {
157
- <T_10 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_10, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined): Promise<InstanceType<T_10>>;
158
- <T_11 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_11, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined): Promise<InstanceType<T_11>>;
325
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
326
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
159
327
  };
160
328
  findManyBy: {
161
- <T_12 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_12, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined): Promise<InstanceType<T_12>[]>;
162
- <T_13 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_13, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined): Promise<InstanceType<T_13>[]>;
329
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
330
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
163
331
  };
164
- first: <T_14 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_14, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_14> | null>;
165
- firstOrFail: <T_15 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_15, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_15>>;
166
- findMany: <T_16 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_16, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions | undefined) => Promise<InstanceType<T_16>[]>;
167
- firstOrNew: <T_17 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_17, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_17>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_17>>> | undefined, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_17>>;
168
- firstOrCreate: <T_18 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_18, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_18>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_18>>> | undefined, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_18>>;
169
- updateOrCreate: <T_19 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_19, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_19>>>, updatePayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_19>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_19>>;
170
- fetchOrNewUpMany: <T_20 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_20, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_20>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_20>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_20>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_20>[]>;
171
- fetchOrCreateMany: <T_21 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_21, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_21>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_21>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_21>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_21>[]>;
172
- updateOrCreateMany: <T_22 extends import("@adonisjs/lucid/types/model").LucidModel>(this: T_22, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_22>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_22>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_22>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions | undefined) => Promise<InstanceType<T_22>[]>;
173
- 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>;
174
- truncate: (cascade?: boolean | undefined) => Promise<void>;
332
+ first: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
333
+ firstOrFail: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
334
+ findMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
335
+ firstOrNew: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
336
+ firstOrCreate: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
337
+ updateOrCreate: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, updatePayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>>;
338
+ fetchOrNewUpMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
339
+ fetchOrCreateMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
340
+ updateOrCreateMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T>[]>;
341
+ query: <Model_1 extends import("@adonisjs/lucid/types/model").LucidModel, Result = InstanceType<Model_1>>(this: Model_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model_1, Result>;
342
+ transaction: import("@adonisjs/lucid/types/database").TransactionFn;
343
+ truncate: (cascade?: boolean) => Promise<void>;
175
344
  } & Model;
@@ -5,114 +5,290 @@ export function hasPermissions() {
5
5
  getModelId() {
6
6
  throw new Error('method getModelId must be implemented in target model, which will return key for current object');
7
7
  }
8
+ /**
9
+ * returns list of roles assigned to the model
10
+ */
8
11
  roles() {
9
12
  return Acl.model(this).roles();
10
13
  }
14
+ /**
15
+ * Check if model has role
16
+ * @param role
17
+ */
11
18
  hasRole(role) {
12
19
  return Acl.model(this).hasRole(role);
13
20
  }
21
+ /**
22
+ * Check if model has all roles - returns true ONLY, if model has all roles
23
+ * @param roles
24
+ */
14
25
  hasAllRoles(...roles) {
15
26
  return Acl.model(this).hasAllRoles(...roles);
16
27
  }
28
+ /**
29
+ * Check if model has any role - returns true if model has any of the roles
30
+ * @param roles
31
+ */
17
32
  hasAnyRole(...roles) {
18
33
  return Acl.model(this).hasAnyRole(...roles);
19
34
  }
35
+ /**
36
+ * Assign role to model
37
+ * @param role
38
+ */
20
39
  assignRole(role) {
21
40
  return Acl.model(this).assignRole(role);
22
41
  }
42
+ /**
43
+ * Revoke role from model
44
+ * @param role
45
+ */
23
46
  revokeRole(role) {
24
47
  return Acl.model(this).revokeRole(role);
25
48
  }
49
+ /**
50
+ * Revoke all roles from model
51
+ * @param roles
52
+ */
26
53
  revokeAllRoles(...roles) {
27
54
  return Acl.model(this).revokeAllRoles(...roles);
28
55
  }
29
56
  // roles related section END
30
57
  // permissions related section BEGIN
58
+ /**
59
+ * returns list of permissions assigned to the model
60
+ * @param includeForbiddings
61
+ */
31
62
  permissions(includeForbiddings = false) {
32
63
  return Acl.model(this).permissions(includeForbiddings);
33
64
  }
65
+ /**
66
+ * returns list of global permissions assigned to the model
67
+ * @param includeForbiddings
68
+ */
34
69
  globalPermissions(includeForbiddings = false) {
35
70
  return Acl.model(this).globalPermissions(includeForbiddings);
36
71
  }
72
+ /**
73
+ * returns list of resource permissions assigned to the model
74
+ * @param includeForbiddings
75
+ */
37
76
  async onResourcePermissions(includeForbiddings = false) {
38
77
  return Acl.model(this).onResourcePermissions(includeForbiddings);
39
78
  }
40
- async directGlobalPermissions(includeForbiddings = false) {
79
+ /**
80
+ * Returns list of direct permissions assigned to the model
81
+ * @param includeForbiddings
82
+ */
83
+ directGlobalPermissions(includeForbiddings = false) {
41
84
  return Acl.model(this).directGlobalPermissions(includeForbiddings);
42
85
  }
43
- async directResourcePermissions(includeForbiddings = false) {
86
+ /**
87
+ * Returns list of direct resource permissions assigned to the model
88
+ * @param includeForbiddings
89
+ */
90
+ directResourcePermissions(includeForbiddings = false) {
44
91
  return Acl.model(this).directResourcePermissions(includeForbiddings);
45
92
  }
46
- async containsPermission(permission) {
93
+ /**
94
+ * Check if model has "contains" permission
95
+ * If permission is forbidden, it will return true
96
+ * @param permission
97
+ */
98
+ containsPermission(permission) {
47
99
  return Acl.model(this).containsPermission(permission);
48
100
  }
49
- async containsAllPermissions(permissions) {
101
+ /**
102
+ * Check if model contains all permissions
103
+ * @param permissions
104
+ */
105
+ containsAllPermissions(permissions) {
50
106
  return Acl.model(this).containsAllPermissions(permissions);
51
107
  }
52
- async containsAnyPermission(permissions) {
108
+ /**
109
+ * Check if model contains any permission
110
+ * @param permissions
111
+ */
112
+ containsAnyPermission(permissions) {
53
113
  return Acl.model(this).containsAnyPermission(permissions);
54
114
  }
55
- async containsDirectPermission(permission) {
115
+ /**
116
+ * Check if model contains direct permission
117
+ * @param permission
118
+ */
119
+ containsDirectPermission(permission) {
56
120
  return Acl.model(this).containsDirectPermission(permission);
57
121
  }
58
- async containsAllPermissionsDirectly(permissions) {
122
+ /**
123
+ * Check if model contains all direct permissions
124
+ * @param permissions
125
+ */
126
+ containsAllPermissionsDirectly(permissions) {
59
127
  return Acl.model(this).containsAllPermissionsDirectly(permissions);
60
128
  }
61
- async containsAnyPermissionDirectly(permissions) {
129
+ /**
130
+ * Check if model contains any direct permission
131
+ * @param permissions
132
+ */
133
+ containsAnyPermissionDirectly(permissions) {
62
134
  return Acl.model(this).containsAnyPermissionDirectly(permissions);
63
135
  }
64
- async hasPermission(permission, target) {
136
+ /**
137
+ * Check if model has permission
138
+ * @param permission
139
+ * @param target
140
+ */
141
+ hasPermission(permission, target) {
65
142
  return Acl.model(this).hasPermission(permission, target);
66
143
  }
67
- async hasAllPermissions(permissions, target) {
144
+ /**
145
+ * Check if model has all permissions
146
+ * @param permissions
147
+ * @param target
148
+ */
149
+ hasAllPermissions(permissions, target) {
68
150
  return Acl.model(this).hasAllPermissions(permissions, target);
69
151
  }
70
- async hasAnyPermission(permissions, target) {
152
+ /**
153
+ * Check if model has any permission
154
+ * @param permissions
155
+ * @param target
156
+ */
157
+ hasAnyPermission(permissions, target) {
71
158
  return Acl.model(this).hasAnyPermission(permissions, target);
72
159
  }
73
- async hasAnyDirectPermission(permissions, target) {
160
+ /**
161
+ * Check if model has direct permission
162
+ * @param permissions
163
+ * @param target
164
+ */
165
+ hasAnyDirectPermission(permissions, target) {
74
166
  return Acl.model(this).hasAnyDirectPermission(permissions, target);
75
167
  }
76
- async hasDirectPermission(permission, target) {
168
+ /**
169
+ * Check if model has direct permission
170
+ * @param permission
171
+ * @param target
172
+ */
173
+ hasDirectPermission(permission, target) {
77
174
  return Acl.model(this).hasDirectPermission(permission, target);
78
175
  }
79
- async hasAllPermissionsDirect(permissions, target) {
176
+ /**
177
+ * Check if model has all direct permissions
178
+ * @param permissions
179
+ * @param target
180
+ */
181
+ hasAllPermissionsDirect(permissions, target) {
80
182
  return Acl.model(this).hasAllPermissionsDirect(permissions, target);
81
183
  }
184
+ /**
185
+ * Check if model has all permission
186
+ * @param permissions
187
+ * @param target
188
+ */
82
189
  canAll(permissions, target) {
83
190
  return Acl.model(this).canAll(permissions, target);
84
191
  }
85
192
  canAny(permissions, target) {
86
193
  return Acl.model(this).canAny(permissions, target);
87
194
  }
88
- async assignDirectPermission(permission, target) {
195
+ /**
196
+ * Check if model has any permission
197
+ * @param permission
198
+ * @param target
199
+ */
200
+ assignDirectPermission(permission, target) {
89
201
  return Acl.model(this).assignDirectPermission(permission, target);
90
202
  }
203
+ /**
204
+ * Allow permission for model
205
+ * @param permission
206
+ * @param target
207
+ */
91
208
  allow(permission, target) {
92
209
  return Acl.model(this).allow(permission, target);
93
210
  }
94
- async revokePermission(permission, target) {
211
+ /**
212
+ * Revoke permission from model
213
+ * @param permission
214
+ * @param target
215
+ */
216
+ revokePermission(permission, target) {
95
217
  return Acl.model(this).revokePermission(permission, target);
96
218
  }
97
- async revokeAllPermissions(permissions, target) {
219
+ /**
220
+ * Revoke all permissions from model
221
+ * @param permissions
222
+ * @param target
223
+ */
224
+ revokeAllPermissions(permissions, target) {
98
225
  return Acl.model(this).revokeAllPermissions(permissions, target);
99
226
  }
100
- async flushPermissions() {
227
+ /**
228
+ * Flush(revoke all) permissions from model
229
+ */
230
+ flushPermissions() {
101
231
  return Acl.model(this).flushPermissions();
102
232
  }
103
- async flush() {
233
+ /**
234
+ * Flush(revoke all) roles and permissions from model
235
+ */
236
+ flush() {
104
237
  return Acl.model(this).flush();
105
238
  }
106
- async forbid(permission, target) {
239
+ /**
240
+ * Sync Role with the given list
241
+ * @param roles
242
+ * @param detach
243
+ */
244
+ syncRoles(roles, detach = true) {
245
+ return Acl.model(this).syncRoles(roles, detach);
246
+ }
247
+ /**
248
+ * Sync Role with the given list without detaching existing roles
249
+ * @param roles
250
+ */
251
+ syncRolesWithoutDetaching(roles) {
252
+ return Acl.model(this).syncRolesWithoutDetaching(roles);
253
+ }
254
+ /**
255
+ * Sync permissions with the given list
256
+ * @param permissions
257
+ * @param target
258
+ */
259
+ syncPermissions(permissions, target) {
260
+ return Acl.model(this).syncPermissions(permissions, target);
261
+ }
262
+ /**
263
+ * Forbid permission for model
264
+ * @param permission
265
+ * @param target
266
+ */
267
+ forbid(permission, target) {
107
268
  return Acl.model(this).forbid(permission, target);
108
269
  }
109
- async forbidAll(permissions, target) {
270
+ /**
271
+ * Forbid all permissions for model
272
+ * @param permissions
273
+ * @param target
274
+ */
275
+ forbidAll(permissions, target) {
110
276
  return Acl.model(this).forbidAll(permissions, target);
111
277
  }
112
- async unforbidAll(permissions, target) {
278
+ /**
279
+ * Unforbid all permissions for model
280
+ * @param permissions
281
+ * @param target
282
+ */
283
+ unforbidAll(permissions, target) {
113
284
  return Acl.model(this).unforbidAll(permissions, target);
114
285
  }
115
- async unforbid(permission, target) {
286
+ /**
287
+ * Unforbid permission for model
288
+ * @param permission
289
+ * @param target
290
+ */
291
+ unforbid(permission, target) {
116
292
  return Acl.model(this).unforbid(permission, target);
117
293
  }
118
294
  }
@@ -1,8 +1,8 @@
1
- import { AclModel, MorphInterface, OptionsInterface } from '../types.js';
2
- import RolesService from './roles/roles_service.js';
3
- import BaseAdapter from './base_adapter.js';
4
- import ModelManager from '../model_manager.js';
5
- import PermissionService from './permissions/permissions_service.js';
1
+ import { AclModel, MorphInterface, OptionsInterface } from '../../types.js';
2
+ import RolesService from '../roles/roles_service.js';
3
+ import BaseAdapter from '../base_adapter.js';
4
+ import ModelManager from '../../model_manager.js';
5
+ import PermissionService from '../permissions/permissions_service.js';
6
6
  export declare class ModelHasRolePermissions extends BaseAdapter {
7
7
  protected manager: ModelManager;
8
8
  protected map: MorphInterface;
@@ -11,7 +11,7 @@ export declare class ModelHasRolePermissions extends BaseAdapter {
11
11
  protected roleService: RolesService;
12
12
  protected permissionService: PermissionService;
13
13
  constructor(manager: ModelManager, map: MorphInterface, options: OptionsInterface, model: AclModel);
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
+ roles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, import("../../types.js").RoleModel<import("@adonisjs/lucid/types/model").LucidModel>>;
15
15
  hasRole(role: string): Promise<boolean>;
16
16
  hasAllRoles(...roles: string[]): Promise<boolean>;
17
17
  hasAnyRole(...roles: string[]): Promise<boolean>;
@@ -21,17 +21,35 @@ export declare class ModelHasRolePermissions extends BaseAdapter {
21
21
  revokeRole(role: string): Promise<boolean>;
22
22
  revokeAllRoles(...roles: string[]): Promise<boolean>;
23
23
  flushRoles(): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel, any>;
24
- permissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
25
- globalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
26
- onResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
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>>;
24
+ /**
25
+ * Sync roles with the model (detach all roles and assign new roles)
26
+ * @param roles - array of roles
27
+ * @param detach - if true, it will detach the existing roles
28
+ */
29
+ syncRoles(roles: string[], detach?: boolean): Promise<boolean>;
30
+ /**
31
+ * Sync roles with the model without detaching the existing ones
32
+ * @param roles
33
+ */
34
+ syncRolesWithoutDetaching(roles: string[]): Promise<boolean>;
35
+ permissions(includeForbiddings?: boolean): Promise<import("../../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
36
+ /**
37
+ * returns list of global permissions assigned to the model
38
+ * @param includeForbiddings
39
+ */
40
+ globalPermissions(includeForbiddings?: boolean): Promise<import("../../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
41
+ /**
42
+ * @param includeForbiddings
43
+ */
44
+ onResourcePermissions(includeForbiddings?: boolean): Promise<import("../../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
45
+ 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
46
  /**
29
47
  * Get permission through roles
30
48
  * @param includeForbiddings
31
49
  */
32
- rolePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
33
- directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
34
- directResourcePermissions(includeForbiddings?: boolean): Promise<import("../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
50
+ rolePermissions(includeForbiddings?: boolean): Promise<import("../../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
51
+ directGlobalPermissions(includeForbiddings?: boolean): Promise<import("../../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
52
+ directResourcePermissions(includeForbiddings?: boolean): Promise<import("../../types.js").PermissionModel<import("@adonisjs/lucid/types/model").LucidModel>[]>;
35
53
  containsPermission(permission: string): Promise<boolean>;
36
54
  contains(permission: string): Promise<boolean>;
37
55
  containsAllPermissions(permissions: string[]): Promise<boolean>;
@@ -39,7 +57,16 @@ export declare class ModelHasRolePermissions extends BaseAdapter {
39
57
  containsDirectPermission(permission: string): Promise<boolean>;
40
58
  containsAllPermissionsDirectly(permissions: string[]): Promise<boolean>;
41
59
  containsAnyPermissionDirectly(permissions: string[]): Promise<boolean>;
60
+ /**
61
+ * @param permission
62
+ * @param target
63
+ */
42
64
  hasPermission(permission: string, target?: AclModel | Function): Promise<boolean>;
65
+ /**
66
+ *
67
+ * @param permissions
68
+ * @param target
69
+ */
43
70
  hasAllPermissions(permissions: string[], target?: AclModel | Function): Promise<boolean>;
44
71
  hasAnyPermission(permissions: string[], target?: AclModel | Function): Promise<boolean>;
45
72
  hasAnyDirectPermission(permissions: string[], target?: AclModel | Function): Promise<boolean>;
@@ -57,6 +84,7 @@ export declare class ModelHasRolePermissions extends BaseAdapter {
57
84
  revokeAll(permissions: string[], target?: AclModel | Function): Promise<any[]>;
58
85
  revokeAllPermissions(permissions: string[], target?: AclModel | Function): Promise<any[]>;
59
86
  flushPermissions(): Promise<any[]>;
87
+ syncPermissions(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
60
88
  flush(): Promise<boolean>;
61
89
  forbid(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
62
90
  forbidAll(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
@@ -1,7 +1,7 @@
1
- import RolesService from './roles/roles_service.js';
2
- import { destructTarget, formatList } from './helper.js';
3
- import BaseAdapter from './base_adapter.js';
4
- import PermissionService from './permissions/permissions_service.js';
1
+ import RolesService from '../roles/roles_service.js';
2
+ import { destructTarget, formatList } from '../helper.js';
3
+ import BaseAdapter from '../base_adapter.js';
4
+ import PermissionService from '../permissions/permissions_service.js';
5
5
  export class ModelHasRolePermissions extends BaseAdapter {
6
6
  manager;
7
7
  map;
@@ -53,14 +53,39 @@ export class ModelHasRolePermissions extends BaseAdapter {
53
53
  flushRoles() {
54
54
  return this.roleService.flush(this.map.getAlias(this.model), this.model.getModelId());
55
55
  }
56
+ /**
57
+ * Sync roles with the model (detach all roles and assign new roles)
58
+ * @param roles - array of roles
59
+ * @param detach - if true, it will detach the existing roles
60
+ */
61
+ async syncRoles(roles, detach = true) {
62
+ if (detach) {
63
+ await this.flushRoles();
64
+ }
65
+ return this.assignAllRoles(...roles);
66
+ }
67
+ /**
68
+ * Sync roles with the model without detaching the existing ones
69
+ * @param roles
70
+ */
71
+ syncRolesWithoutDetaching(roles) {
72
+ return this.syncRoles(roles, false);
73
+ }
56
74
  // roles related section END
57
75
  // permissions related section BEGIN
58
76
  async permissions(includeForbiddings = false) {
59
77
  return this.permissionService.all(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
60
78
  }
79
+ /**
80
+ * returns list of global permissions assigned to the model
81
+ * @param includeForbiddings
82
+ */
61
83
  async globalPermissions(includeForbiddings = false) {
62
84
  return this.permissionService.global(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
63
85
  }
86
+ /**
87
+ * @param includeForbiddings
88
+ */
64
89
  async onResourcePermissions(includeForbiddings = false) {
65
90
  return this.permissionService.onResource(this.map.getAlias(this.model), this.model.getModelId(), includeForbiddings);
66
91
  }
@@ -106,9 +131,18 @@ export class ModelHasRolePermissions extends BaseAdapter {
106
131
  const result = await this.permissionService.containsAnyDirect(this.map.getAlias(this.model), this.model.getModelId(), permissions);
107
132
  return result;
108
133
  }
134
+ /**
135
+ * @param permission
136
+ * @param target
137
+ */
109
138
  async hasPermission(permission, target) {
110
139
  return this.hasAnyPermission([permission], target);
111
140
  }
141
+ /**
142
+ *
143
+ * @param permissions
144
+ * @param target
145
+ */
112
146
  async hasAllPermissions(permissions, target) {
113
147
  const entity = await destructTarget(this.map, target);
114
148
  return await this.permissionService.hasAll(this.map.getAlias(this.model), this.model.getModelId(), permissions, entity.targetClass, entity.targetId);
@@ -167,6 +201,10 @@ export class ModelHasRolePermissions extends BaseAdapter {
167
201
  async flushPermissions() {
168
202
  return this.permissionService.flush(this.map.getAlias(this.model), this.model.getModelId());
169
203
  }
204
+ async syncPermissions(permissions, target) {
205
+ await this.flushPermissions();
206
+ return this.allowAll(permissions, target);
207
+ }
170
208
  async flush() {
171
209
  await this.permissionService.flush(this.map.getAlias(this.model), this.model.getModelId());
172
210
  await this.roleService.flush(this.map.getAlias(this.model), this.model.getModelId());
@@ -1,6 +1,6 @@
1
- import BaseService from './base_service.js';
1
+ import BaseService from '../base_service.js';
2
2
  import { BaseModel } from '@adonisjs/lucid/orm';
3
- import { ModelIdType, MorphInterface, OptionsInterface } from '../types.js';
3
+ import { ModelIdType, MorphInterface, OptionsInterface } from '../../types.js';
4
4
  export default class ModelService extends BaseService {
5
5
  protected options: OptionsInterface;
6
6
  private modelPermissionClassName;
@@ -11,8 +11,8 @@ export default class ModelService extends BaseService {
11
11
  private modelRoleQuery;
12
12
  private readonly modelRoleTable;
13
13
  constructor(options: OptionsInterface, modelPermissionClassName: typeof BaseModel, modelRoleClassName: typeof BaseModel, map: MorphInterface);
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
+ 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>>;
15
15
  allFor(modelType: string, roleId: number): Promise<any>;
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>>;
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>>;
17
17
  allByPermissionFor(modelType: string, permissionId: ModelIdType): Promise<any>;
18
18
  }
@@ -1,5 +1,5 @@
1
- import BaseService from './base_service.js';
2
- import { getModelPermissionModelQuery, getModelRoleModelQuery } from './query_helper.js';
1
+ import BaseService from '../base_service.js';
2
+ import { getModelPermissionModelQuery, getModelRoleModelQuery } from '../query_helper.js';
3
3
  export default class ModelService extends BaseService {
4
4
  options;
5
5
  modelPermissionClassName;
@@ -1,5 +1,5 @@
1
1
  import { AclModel, MorphInterface, OptionsInterface, PermissionInterface } from '../../types.js';
2
- import ModelService from '../model_service.js';
2
+ import ModelService from '../models/model_service.js';
3
3
  import RoleService from '../roles/roles_service.js';
4
4
  import PermissionService from './permissions_service.js';
5
5
  import { BaseModel } from '@adonisjs/lucid/orm';
@@ -1,5 +1,5 @@
1
1
  import { destructTarget } from '../helper.js';
2
- import ModelService from '../model_service.js';
2
+ import ModelService from '../models/model_service.js';
3
3
  import PermissionService from './permissions_service.js';
4
4
  import { getModelPermissionModelQuery, getRoleModelQuery } from '../query_helper.js';
5
5
  import BaseAdapter from '../base_adapter.js';
@@ -1,4 +1,4 @@
1
- import ModelService from '../model_service.js';
1
+ import ModelService from '../models/model_service.js';
2
2
  import PermissionService from '../permissions/permissions_service.js';
3
3
  import { AclModel, MorphInterface, OptionsInterface, RoleInterface } from '../../types.js';
4
4
  import BaseAdapter from '../base_adapter.js';
@@ -64,6 +64,12 @@ export declare class RoleHasModelPermissions extends BaseAdapter {
64
64
  revokeAll(permissions: string[], target?: AclModel | Function): Promise<any[]>;
65
65
  revokeAllPermissions(permissions: string[]): Promise<any[]>;
66
66
  flush(): Promise<any[]>;
67
+ /**
68
+ * Sync permissions with the given list
69
+ * @param permissions - list of permissions
70
+ * @param target
71
+ */
72
+ sync(permissions: string[], target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
67
73
  forbid(permission: string, target?: AclModel | Function): Promise<import("@adonisjs/lucid/types/model").LucidRow[]>;
68
74
  unforbid(permission: string, target?: AclModel | Function): Promise<any[]>;
69
75
  }
@@ -1,5 +1,5 @@
1
1
  import { destructTarget } from '../helper.js';
2
- import ModelService from '../model_service.js';
2
+ import ModelService from '../models/model_service.js';
3
3
  import PermissionService from '../permissions/permissions_service.js';
4
4
  import BaseAdapter from '../base_adapter.js';
5
5
  export class RoleHasModelPermissions extends BaseAdapter {
@@ -142,6 +142,15 @@ export class RoleHasModelPermissions extends BaseAdapter {
142
142
  async flush() {
143
143
  return this.permissionService.flush(this.map.getAlias(this.role), this.role.getModelId());
144
144
  }
145
+ /**
146
+ * Sync permissions with the given list
147
+ * @param permissions - list of permissions
148
+ * @param target
149
+ */
150
+ async sync(permissions, target) {
151
+ await this.flush();
152
+ return this.giveAll(permissions, target);
153
+ }
145
154
  async forbid(permission, target) {
146
155
  const entity = await destructTarget(this.map, target);
147
156
  return this.permissionService.forbid(this.map.getAlias(this.role), this.role.getModelId(), permission, entity.targetClass, entity.targetId);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@holoyan/adonisjs-permissions",
3
3
  "description": "Adonisjs roles and permissions system",
4
- "version": "0.8.21",
4
+ "version": "0.8.23",
5
5
  "engines": {
6
6
  "node": ">=18.16.0"
7
7
  },