@jantstack/adonis-authz 1.0.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 (102) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +138 -0
  3. package/build/commands/main.d.ts +7 -0
  4. package/build/commands/main.d.ts.map +1 -0
  5. package/build/commands/main.js +7 -0
  6. package/build/commands/main.js.map +1 -0
  7. package/build/commands/openfga_import.d.ts +28 -0
  8. package/build/commands/openfga_import.d.ts.map +1 -0
  9. package/build/commands/openfga_import.js +74 -0
  10. package/build/commands/openfga_import.js.map +1 -0
  11. package/build/commands/openfga_provision.d.ts +27 -0
  12. package/build/commands/openfga_provision.d.ts.map +1 -0
  13. package/build/commands/openfga_provision.js +73 -0
  14. package/build/commands/openfga_provision.js.map +1 -0
  15. package/build/configure.d.ts +10 -0
  16. package/build/configure.d.ts.map +1 -0
  17. package/build/configure.js +43 -0
  18. package/build/configure.js.map +1 -0
  19. package/build/index.d.ts +21 -0
  20. package/build/index.d.ts.map +1 -0
  21. package/build/index.js +18 -0
  22. package/build/index.js.map +1 -0
  23. package/build/providers/authz_provider.d.ts +17 -0
  24. package/build/providers/authz_provider.d.ts.map +1 -0
  25. package/build/providers/authz_provider.js +21 -0
  26. package/build/providers/authz_provider.js.map +1 -0
  27. package/build/services/main.d.ts +10 -0
  28. package/build/services/main.d.ts.map +1 -0
  29. package/build/services/main.js +13 -0
  30. package/build/services/main.js.map +1 -0
  31. package/build/src/catalog.d.ts +3 -0
  32. package/build/src/catalog.d.ts.map +1 -0
  33. package/build/src/catalog.js +97 -0
  34. package/build/src/catalog.js.map +1 -0
  35. package/build/src/define_config.d.ts +53 -0
  36. package/build/src/define_config.d.ts.map +1 -0
  37. package/build/src/define_config.js +4 -0
  38. package/build/src/define_config.js.map +1 -0
  39. package/build/src/drivers/database_driver.d.ts +48 -0
  40. package/build/src/drivers/database_driver.d.ts.map +1 -0
  41. package/build/src/drivers/database_driver.js +260 -0
  42. package/build/src/drivers/database_driver.js.map +1 -0
  43. package/build/src/drivers/openfga_driver.d.ts +107 -0
  44. package/build/src/drivers/openfga_driver.d.ts.map +1 -0
  45. package/build/src/drivers/openfga_driver.js +450 -0
  46. package/build/src/drivers/openfga_driver.js.map +1 -0
  47. package/build/src/manager.d.ts +29 -0
  48. package/build/src/manager.d.ts.map +1 -0
  49. package/build/src/manager.js +79 -0
  50. package/build/src/manager.js.map +1 -0
  51. package/build/src/middleware/app_access_middleware.d.ts +23 -0
  52. package/build/src/middleware/app_access_middleware.d.ts.map +1 -0
  53. package/build/src/middleware/app_access_middleware.js +53 -0
  54. package/build/src/middleware/app_access_middleware.js.map +1 -0
  55. package/build/src/models/authz_assignment.d.ts +166 -0
  56. package/build/src/models/authz_assignment.d.ts.map +1 -0
  57. package/build/src/models/authz_assignment.js +60 -0
  58. package/build/src/models/authz_assignment.js.map +1 -0
  59. package/build/src/models/authz_deny.d.ts +161 -0
  60. package/build/src/models/authz_deny.d.ts.map +1 -0
  61. package/build/src/models/authz_deny.js +50 -0
  62. package/build/src/models/authz_deny.js.map +1 -0
  63. package/build/src/models/authz_permission.d.ts +159 -0
  64. package/build/src/models/authz_permission.d.ts.map +1 -0
  65. package/build/src/models/authz_permission.js +42 -0
  66. package/build/src/models/authz_permission.js.map +1 -0
  67. package/build/src/models/authz_role.d.ts +166 -0
  68. package/build/src/models/authz_role.d.ts.map +1 -0
  69. package/build/src/models/authz_role.js +66 -0
  70. package/build/src/models/authz_role.js.map +1 -0
  71. package/build/src/models/authz_role_permission.d.ts +155 -0
  72. package/build/src/models/authz_role_permission.d.ts.map +1 -0
  73. package/build/src/models/authz_role_permission.js +35 -0
  74. package/build/src/models/authz_role_permission.js.map +1 -0
  75. package/build/src/testing/contract.d.ts +27 -0
  76. package/build/src/testing/contract.d.ts.map +1 -0
  77. package/build/src/testing/contract.js +211 -0
  78. package/build/src/testing/contract.js.map +1 -0
  79. package/build/src/testing/main.d.ts +11 -0
  80. package/build/src/testing/main.d.ts.map +1 -0
  81. package/build/src/testing/main.js +10 -0
  82. package/build/src/testing/main.js.map +1 -0
  83. package/build/src/traits/authz_scopes.d.ts +21 -0
  84. package/build/src/traits/authz_scopes.d.ts.map +1 -0
  85. package/build/src/traits/authz_scopes.js +45 -0
  86. package/build/src/traits/authz_scopes.js.map +1 -0
  87. package/build/src/traits/has_uuid.d.ts +151 -0
  88. package/build/src/traits/has_uuid.d.ts.map +1 -0
  89. package/build/src/traits/has_uuid.js +38 -0
  90. package/build/src/traits/has_uuid.js.map +1 -0
  91. package/build/src/types.d.ts +153 -0
  92. package/build/src/types.d.ts.map +1 -0
  93. package/build/src/types.js +38 -0
  94. package/build/src/types.js.map +1 -0
  95. package/build/stubs/config/app_acl.stub +81 -0
  96. package/build/stubs/config/authorization.stub +74 -0
  97. package/build/stubs/main.d.ts +3 -0
  98. package/build/stubs/main.d.ts.map +1 -0
  99. package/build/stubs/main.js +3 -0
  100. package/build/stubs/main.js.map +1 -0
  101. package/build/stubs/migration.stub +124 -0
  102. package/package.json +94 -0
@@ -0,0 +1,155 @@
1
+ import { DateTime } from 'luxon';
2
+ declare const AuthzRolePermission_base: {
3
+ new (...args: any[]): {
4
+ $attributes: import("@adonisjs/lucid/types/model").ModelObject;
5
+ $extras: import("@adonisjs/lucid/types/model").ModelObject;
6
+ $original: import("@adonisjs/lucid/types/model").ModelObject;
7
+ $preloaded: {
8
+ [relation: string]: import("@adonisjs/lucid/types/model").LucidRow | import("@adonisjs/lucid/types/model").LucidRow[];
9
+ };
10
+ $sideloaded: import("@adonisjs/lucid/types/model").ModelObject;
11
+ $primaryKeyValue?: number | string;
12
+ $isPersisted: boolean;
13
+ $isNew: boolean;
14
+ $isLocal: boolean;
15
+ $dirty: import("@adonisjs/lucid/types/model").ModelObject;
16
+ $isDirty: boolean;
17
+ $isDeleted: boolean;
18
+ $options?: import("@adonisjs/lucid/types/model").ModelOptions;
19
+ $trx?: import("@adonisjs/lucid/types/database").TransactionClientContract;
20
+ $setOptionsAndTrx(options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): void;
21
+ useTransaction(trx: import("@adonisjs/lucid/types/database").TransactionClientContract): /*elided*/ any;
22
+ useConnection(connection: string): /*elided*/ any;
23
+ $getQueryFor(action: "insert", client: import("@adonisjs/lucid/types/database").QueryClientContract): ReturnType<import("@adonisjs/lucid/types/database").QueryClientContract["insertQuery"]>;
24
+ $getQueryFor(action: "update" | "delete" | "refresh", client: import("@adonisjs/lucid/types/database").QueryClientContract): import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<import("@adonisjs/lucid/types/model").LucidModel>;
25
+ $setAttribute(key: string, value: any): void;
26
+ $getAttribute(key: string): any;
27
+ $getAttributeFromCache(key: string, callback: import("@adonisjs/lucid/types/model").CacheNode["getter"]): any;
28
+ $hasRelated(key: string): boolean;
29
+ $setRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | null): void;
30
+ $pushRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | null): void;
31
+ $getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | undefined | null;
32
+ $consumeAdapterResult(adapterResult: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject): void;
33
+ $hydrateOriginals(): void;
34
+ fill(value: Partial<import("@adonisjs/lucid/types/model").ModelAttributes</*elided*/ any>>, allowExtraProperties?: boolean): /*elided*/ any;
35
+ merge(value: Partial<import("@adonisjs/lucid/types/model").ModelAttributes</*elided*/ any>>, allowExtraProperties?: boolean): /*elided*/ any;
36
+ isDirty(fields?: undefined[] | undefined): boolean;
37
+ enableForceUpdate(): /*elided*/ any;
38
+ save(): Promise</*elided*/ any>;
39
+ saveQuietly(): Promise</*elided*/ any>;
40
+ lockForUpdate<T>(callback: (user: /*elided*/ any) => T | Promise<T>): Promise<T>;
41
+ delete(): Promise<void>;
42
+ deleteQuietly(): Promise<void>;
43
+ refresh(): Promise</*elided*/ any>;
44
+ load: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
45
+ loadOnce: import("@adonisjs/lucid/types/model").LucidRowPreloadOnce</*elided*/ any>;
46
+ preload: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
47
+ loadAggregate: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = NonNullable<Self[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? (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>;
48
+ loadCount: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = NonNullable<Self[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? (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) | undefined) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
49
+ serializeAttributes(fields?: import("@adonisjs/lucid/types/model").CherryPickFields, raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
50
+ serializeComputed(fields?: import("@adonisjs/lucid/types/model").CherryPickFields): import("@adonisjs/lucid/types/model").ModelObject;
51
+ serializeRelations(fields: undefined, raw: true): {
52
+ [key: string]: import("@adonisjs/lucid/types/model").LucidRow | import("@adonisjs/lucid/types/model").LucidRow[];
53
+ };
54
+ serializeRelations(cherryPick: import("@adonisjs/lucid/types/model").CherryPick["relations"] | undefined, raw: false | undefined): import("@adonisjs/lucid/types/model").ModelObject;
55
+ serializeRelations(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick["relations"], raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
56
+ serialize(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick): import("@adonisjs/lucid/types/model").ModelObject;
57
+ toObject(): import("@adonisjs/lucid/types/model").ModelObject;
58
+ toJSON(): import("@adonisjs/lucid/types/model").ModelObject;
59
+ toAttributes(): Record<string, any>;
60
+ related<Name extends undefined>(relation: Name): NonNullable</*elided*/ any[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? (import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> & /*elided*/ any[Name] & {})["client"] : never;
61
+ };
62
+ selfAssignPrimaryKey: boolean;
63
+ generateUuid(model: any): void;
64
+ nextUuid(): string;
65
+ find: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
66
+ readonly booted: boolean;
67
+ $columnsDefinitions: Map<string, import("@adonisjs/lucid/types/model").ModelColumnOptions>;
68
+ $relationsDefinitions: Map<string, import("@adonisjs/lucid/types/relations").RelationshipsContract>;
69
+ $computedDefinitions: Map<string, import("@adonisjs/lucid/types/model").ComputedOptions>;
70
+ primaryKey: string;
71
+ connection?: string | undefined;
72
+ namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract;
73
+ table: string;
74
+ $adapter: import("@adonisjs/lucid/types/model").AdapterContract;
75
+ useAdapter: (adapter: import("@adonisjs/lucid/types/model").AdapterContract) => void;
76
+ $hooks: import("@poppinss/hooks").default<any>;
77
+ $keys: {
78
+ attributesToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
79
+ attributesToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract;
80
+ columnsToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
81
+ columnsToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract;
82
+ serializedToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
83
+ serializedToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
84
+ columnAliasesToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
85
+ };
86
+ $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>;
87
+ $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>[];
88
+ $addColumn: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ColumnOptions>) => import("@adonisjs/lucid/types/model").ColumnOptions;
89
+ $hasColumn: (name: string) => boolean;
90
+ $getColumn: (name: string) => import("@adonisjs/lucid/types/model").ModelColumnOptions | undefined;
91
+ $getColumnAlias: (columnName: string) => string;
92
+ columnsForSelect: () => Record<string, string>;
93
+ $addComputed: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ComputedOptions>) => import("@adonisjs/lucid/types/model").ComputedOptions;
94
+ $hasComputed: (name: string) => boolean;
95
+ $getComputed: (name: string) => import("@adonisjs/lucid/types/model").ComputedOptions | undefined;
96
+ $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;
97
+ $hasRelation: (name: string) => boolean;
98
+ $getRelation: {
99
+ <Model extends import("@adonisjs/lucid/types/model").LucidModel, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<InstanceType<Model>>>(this: Model, name: Name): NonNullable<InstanceType<Model>[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<import("@adonisjs/lucid/types/model").LucidModel, import("@adonisjs/lucid/types/model").LucidModel> ? NonNullable<InstanceType<Model>[Name]>["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract;
100
+ <Model extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
101
+ };
102
+ $defineProperty: <Model extends import("@adonisjs/lucid/types/model").LucidModel, Prop extends keyof Model>(this: Model, propertyName: Prop, defaultValue: Model[Prop], strategy: "inherit" | "define" | ((value: Model[Prop]) => Model[Prop])) => void;
103
+ boot: () => void;
104
+ before: {
105
+ <Model extends import("@adonisjs/lucid/types/model").LucidModel, Event extends "find" | "fetch">(this: Model, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model>, Event>): void;
106
+ <Model extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<[import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model>, import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model>], "paginate">): void;
107
+ <Model extends import("@adonisjs/lucid/types/model").LucidModel, Event extends import("@adonisjs/lucid/types/model").EventsList>(this: Model, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model>, Event>): void;
108
+ };
109
+ after: {
110
+ <Model extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model>[], "fetch">): void;
111
+ <Model extends import("@adonisjs/lucid/types/model").LucidModel>(this: Model, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelPaginatorContract<InstanceType<Model>>, "paginate">): void;
112
+ <Model extends import("@adonisjs/lucid/types/model").LucidModel, Event extends import("@adonisjs/lucid/types/model").EventsList>(this: Model, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model>, Event>): void;
113
+ };
114
+ 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>>;
115
+ createQuietly: <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>>;
116
+ 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>[]>;
117
+ createManyQuietly: <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>[]>;
118
+ findOrFail: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
119
+ findBy: {
120
+ <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>>;
121
+ <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>>;
122
+ };
123
+ findByOrFail: {
124
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
125
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>>;
126
+ };
127
+ findManyBy: {
128
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
129
+ <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T>[]>;
130
+ };
131
+ first: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T>>;
132
+ firstOrFail: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>>;
133
+ findMany: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
134
+ 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>>;
135
+ 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>>;
136
+ 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>>;
137
+ 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>[]>;
138
+ 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>[]>;
139
+ 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>[]>;
140
+ all: <T extends import("@adonisjs/lucid/types/model").LucidModel>(this: T, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T>[]>;
141
+ query: <Model extends import("@adonisjs/lucid/types/model").LucidModel, Result = InstanceType<Model>>(this: Model, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => import("@adonisjs/lucid/types/model").ModelQueryBuilderContract<Model, Result>;
142
+ transaction: import("@adonisjs/lucid/types/database").TransactionFn;
143
+ truncate: (cascade?: boolean) => Promise<void>;
144
+ } & import("@adonisjs/lucid/types/model").LucidModel;
145
+ /** Pivot rol ↔ permiso del motor de autorización propio. */
146
+ export default class AuthzRolePermission extends AuthzRolePermission_base {
147
+ static table: string;
148
+ static primaryKey: string;
149
+ uuid: string;
150
+ roleUuid: string;
151
+ permissionUuid: string;
152
+ createdAt: DateTime;
153
+ }
154
+ export {};
155
+ //# sourceMappingURL=authz_role_permission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authz_role_permission.d.ts","sourceRoot":"","sources":["../../../src/models/authz_role_permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oZAsBoxtB,gDAAiD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAjBr2tB,4DAA4D;AAC5D,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,wBAA2B;IAC1E,OAAc,KAAK,SAA2B;IAC9C,OAAc,UAAU,SAAS;IAGzB,IAAI,EAAE,MAAM,CAAA;IAGZ,QAAQ,EAAE,MAAM,CAAA;IAGhB,cAAc,EAAE,MAAM,CAAA;IAGtB,SAAS,EAAE,QAAQ,CAAA;CAC5B"}
@@ -0,0 +1,35 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { DateTime } from 'luxon';
11
+ import { BaseModel, column } from '@adonisjs/lucid/orm';
12
+ import { compose } from '@adonisjs/core/helpers';
13
+ import { hasUuid } from '../traits/has_uuid.js';
14
+ /** Pivot rol ↔ permiso del motor de autorización propio. */
15
+ export default class AuthzRolePermission extends compose(BaseModel, hasUuid) {
16
+ static table = 'authz_role_permissions';
17
+ static primaryKey = 'uuid';
18
+ }
19
+ __decorate([
20
+ column({ isPrimary: true }),
21
+ __metadata("design:type", String)
22
+ ], AuthzRolePermission.prototype, "uuid", void 0);
23
+ __decorate([
24
+ column({ columnName: 'role_uuid' }),
25
+ __metadata("design:type", String)
26
+ ], AuthzRolePermission.prototype, "roleUuid", void 0);
27
+ __decorate([
28
+ column({ columnName: 'permission_uuid' }),
29
+ __metadata("design:type", String)
30
+ ], AuthzRolePermission.prototype, "permissionUuid", void 0);
31
+ __decorate([
32
+ column.dateTime({ autoCreate: true, columnName: 'created_at' }),
33
+ __metadata("design:type", DateTime)
34
+ ], AuthzRolePermission.prototype, "createdAt", void 0);
35
+ //# sourceMappingURL=authz_role_permission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authz_role_permission.js","sourceRoot":"","sources":["../../../src/models/authz_role_permission.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE/C,4DAA4D;AAC5D,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;IACnE,MAAM,CAAC,KAAK,GAAG,wBAAwB,CAAA;IACvC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAA;;AAGzB;IADP,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;iDACR;AAGZ;IADP,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;;qDACZ;AAGhB;IADP,MAAM,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;;2DACZ;AAGtB;IADP,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;8BAC7C,QAAQ;sDAAA"}
@@ -0,0 +1,27 @@
1
+ import '@japa/assert';
2
+ import type { AuthorizationDriver, CatalogSpec } from '../types.js';
3
+ /**
4
+ * Suite de contrato del sistema de autorización — EL JUEZ.
5
+ *
6
+ * Cualquier driver (database, openfga, custom del consumidor) debe pasar
7
+ * estos casos sin modificarlos: son la definición ejecutable de la semántica
8
+ * documentada en `#services/authorization/types`. Para enchufar un driver:
9
+ *
10
+ * runAuthorizationDriverContract({
11
+ * name: 'mi-driver',
12
+ * makeDriver: () => new MiDriver(),
13
+ * seedCatalog: (catalog) => ..., // materializa roles/permisos
14
+ * cleanup: () => ..., // borra hechos + catálogo entre tests
15
+ * })
16
+ *
17
+ * `seedCatalog`/`cleanup` son del harness (no del contrato) porque cada
18
+ * backend materializa el catálogo a su manera (tablas propias, FGA model...).
19
+ */
20
+ export interface DriverContractHarness {
21
+ name: string;
22
+ makeDriver: () => AuthorizationDriver | Promise<AuthorizationDriver>;
23
+ seedCatalog: (catalog: CatalogSpec) => Promise<void>;
24
+ cleanup: () => Promise<void>;
25
+ }
26
+ export declare function runAuthorizationDriverContract(harness: DriverContractHarness): void;
27
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/testing/contract.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AAGrB,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EAGZ,MAAM,aAAa,CAAA;AAGpB;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACpE,WAAW,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAoBD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,qBAAqB,QAkP5E"}
@@ -0,0 +1,211 @@
1
+ import '@japa/assert';
2
+ import { test } from '@japa/runner';
3
+ import { v7 as uuidv7 } from 'uuid';
4
+ import { APP_SCOPE } from '../types.js';
5
+ /** Catálogo de prueba: roles a nivel app y a nivel organization. */
6
+ const CONTRACT_CATALOG = {
7
+ permissions: [{ slug: 'docs:read' }, { slug: 'docs:write' }, { slug: 'billing:read' }],
8
+ roles: [
9
+ { slug: 'editor', scopeType: 'app', permissions: ['docs:read', 'docs:write'] },
10
+ { slug: 'viewer', scopeType: 'app', permissions: ['docs:read'] },
11
+ { slug: 'org-editor', scopeType: 'organization', permissions: ['docs:read', 'docs:write'] },
12
+ ],
13
+ };
14
+ function subject(type = 'users') {
15
+ return { type, uuid: uuidv7() };
16
+ }
17
+ function orgScope(uuid = uuidv7()) {
18
+ return { type: 'organization', uuid };
19
+ }
20
+ export function runAuthorizationDriverContract(harness) {
21
+ test.group(`authorization contract [${harness.name}]`, (group) => {
22
+ let driver;
23
+ group.each.setup(async () => {
24
+ await harness.cleanup();
25
+ await harness.seedCatalog(CONTRACT_CATALOG);
26
+ driver = await harness.makeDriver();
27
+ });
28
+ group.teardown(async () => {
29
+ await harness.cleanup();
30
+ });
31
+ test('grant de un rol concede sus permisos (authorize true)', async ({ assert }) => {
32
+ const alice = subject();
33
+ await driver.grant(alice, 'editor', APP_SCOPE);
34
+ assert.isTrue(await driver.authorize(alice, 'docs:read', APP_SCOPE));
35
+ assert.isTrue(await driver.authorize(alice, 'docs:write', APP_SCOPE));
36
+ });
37
+ test('sin asignación → authorize false (denegación por defecto)', async ({ assert }) => {
38
+ assert.isFalse(await driver.authorize(subject(), 'docs:read', APP_SCOPE));
39
+ });
40
+ test('permiso fuera del rol → false; permiso desconocido → false sin throw', async ({ assert, }) => {
41
+ const bob = subject();
42
+ await driver.grant(bob, 'viewer', APP_SCOPE);
43
+ assert.isTrue(await driver.authorize(bob, 'docs:read', APP_SCOPE));
44
+ assert.isFalse(await driver.authorize(bob, 'docs:write', APP_SCOPE));
45
+ assert.isFalse(await driver.authorize(bob, 'no:existe', APP_SCOPE));
46
+ });
47
+ test('revoke retira el permiso', async ({ assert }) => {
48
+ const alice = subject();
49
+ await driver.grant(alice, 'editor', APP_SCOPE);
50
+ await driver.revoke(alice, 'editor', APP_SCOPE);
51
+ assert.isFalse(await driver.authorize(alice, 'docs:read', APP_SCOPE));
52
+ });
53
+ test('grant de rol inexistente para el scope lanza', async ({ assert }) => {
54
+ await assert.rejects(() => driver.grant(subject(), 'no-existe', APP_SCOPE));
55
+ // org-editor existe pero a nivel organization, no app:
56
+ await assert.rejects(() => driver.grant(subject(), 'org-editor', APP_SCOPE));
57
+ });
58
+ test('deny explícito gana sobre el rol; removeDeny lo restaura', async ({ assert }) => {
59
+ const alice = subject();
60
+ await driver.grant(alice, 'editor', APP_SCOPE);
61
+ await driver.deny(alice, 'docs:write', APP_SCOPE);
62
+ assert.isFalse(await driver.authorize(alice, 'docs:write', APP_SCOPE));
63
+ // El deny es quirúrgico: solo bloquea ese permiso.
64
+ assert.isTrue(await driver.authorize(alice, 'docs:read', APP_SCOPE));
65
+ await driver.removeDeny(alice, 'docs:write', APP_SCOPE);
66
+ assert.isTrue(await driver.authorize(alice, 'docs:write', APP_SCOPE));
67
+ });
68
+ test('deny de permiso desconocido lanza (error de programación)', async ({ assert }) => {
69
+ await assert.rejects(() => driver.deny(subject(), 'no:existe', APP_SCOPE));
70
+ });
71
+ test('asignación expirada no concede; expiración futura sí', async ({ assert }) => {
72
+ const past = subject();
73
+ await driver.grant(past, 'editor', APP_SCOPE, {
74
+ expiresAt: new Date(Date.now() - 60_000),
75
+ });
76
+ assert.isFalse(await driver.authorize(past, 'docs:read', APP_SCOPE));
77
+ const future = subject();
78
+ await driver.grant(future, 'editor', APP_SCOPE, {
79
+ expiresAt: new Date(Date.now() + 60_000),
80
+ });
81
+ assert.isTrue(await driver.authorize(future, 'docs:read', APP_SCOPE));
82
+ });
83
+ test('scope aislado: grant en una org NO autoriza en app ni en otra org', async ({ assert, }) => {
84
+ const alice = subject();
85
+ const orgA = orgScope();
86
+ const orgB = orgScope();
87
+ await driver.grant(alice, 'org-editor', orgA);
88
+ assert.isTrue(await driver.authorize(alice, 'docs:write', orgA));
89
+ assert.isFalse(await driver.authorize(alice, 'docs:write', orgB));
90
+ assert.isFalse(await driver.authorize(alice, 'docs:write', APP_SCOPE));
91
+ });
92
+ test('herencia hacia abajo: grant a nivel app autoriza dentro de una org', async ({ assert, }) => {
93
+ const alice = subject();
94
+ await driver.grant(alice, 'editor', APP_SCOPE);
95
+ assert.isTrue(await driver.authorize(alice, 'docs:write', orgScope()));
96
+ });
97
+ test('deny en el scope cercano bloquea el grant heredado, solo ahí', async ({ assert }) => {
98
+ const alice = subject();
99
+ const orgA = orgScope();
100
+ const orgB = orgScope();
101
+ await driver.grant(alice, 'editor', APP_SCOPE);
102
+ await driver.deny(alice, 'docs:write', orgA);
103
+ assert.isFalse(await driver.authorize(alice, 'docs:write', orgA));
104
+ assert.isTrue(await driver.authorize(alice, 'docs:write', orgB));
105
+ assert.isTrue(await driver.authorize(alice, 'docs:write', APP_SCOPE));
106
+ });
107
+ test('holder polimórfico: mismo uuid con distinto type no se cruzan', async ({ assert }) => {
108
+ const uuid = uuidv7();
109
+ const asUser = { type: 'users', uuid };
110
+ const asAdmin = { type: 'admins', uuid };
111
+ await driver.grant(asUser, 'editor', APP_SCOPE);
112
+ assert.isTrue(await driver.authorize(asUser, 'docs:read', APP_SCOPE));
113
+ assert.isFalse(await driver.authorize(asAdmin, 'docs:read', APP_SCOPE));
114
+ });
115
+ test('grant duplicado es idempotente (y refresca expiresAt)', async ({ assert }) => {
116
+ const alice = subject();
117
+ // Primera vez expirada, re-grant sin expiración: debe quedar vigente y única.
118
+ await driver.grant(alice, 'editor', APP_SCOPE, {
119
+ expiresAt: new Date(Date.now() - 60_000),
120
+ });
121
+ await driver.grant(alice, 'editor', APP_SCOPE);
122
+ await driver.grant(alice, 'editor', APP_SCOPE);
123
+ assert.isTrue(await driver.authorize(alice, 'docs:read', APP_SCOPE));
124
+ const holders = await driver.listSubjects('editor', APP_SCOPE);
125
+ assert.lengthOf(holders.filter((h) => h.uuid === alice.uuid), 1);
126
+ });
127
+ test('hasRole respeta scope, herencia y expiración', async ({ assert }) => {
128
+ const alice = subject();
129
+ await driver.grant(alice, 'editor', APP_SCOPE);
130
+ assert.isTrue(await driver.hasRole(alice, 'editor', APP_SCOPE));
131
+ // Herencia hacia abajo: el rol de app "vale" dentro de una org.
132
+ assert.isTrue(await driver.hasRole(alice, 'editor', orgScope()));
133
+ assert.isFalse(await driver.hasRole(alice, 'viewer', APP_SCOPE));
134
+ await driver.revoke(alice, 'editor', APP_SCOPE);
135
+ assert.isFalse(await driver.hasRole(alice, 'editor', APP_SCOPE));
136
+ const expired = subject();
137
+ await driver.grant(expired, 'editor', APP_SCOPE, {
138
+ expiresAt: new Date(Date.now() - 60_000),
139
+ });
140
+ assert.isFalse(await driver.hasRole(expired, 'editor', APP_SCOPE));
141
+ });
142
+ test('listSubjects: holders vigentes del rol en el scope exacto', async ({ assert }) => {
143
+ const alice = subject();
144
+ const bob = subject();
145
+ const expired = subject();
146
+ const otherScope = orgScope();
147
+ await driver.grant(alice, 'editor', APP_SCOPE);
148
+ await driver.grant(bob, 'editor', APP_SCOPE);
149
+ await driver.grant(expired, 'editor', APP_SCOPE, {
150
+ expiresAt: new Date(Date.now() - 60_000),
151
+ });
152
+ await driver.grant(subject(), 'org-editor', otherScope);
153
+ const holders = await driver.listSubjects('editor', APP_SCOPE);
154
+ const uuids = holders.map((h) => h.uuid);
155
+ assert.includeMembers(uuids, [alice.uuid, bob.uuid]);
156
+ assert.notInclude(uuids, expired.uuid);
157
+ });
158
+ test('listScopes: scopes directos que conceden el permiso, sin los denegados', async ({ assert, }) => {
159
+ const alice = subject();
160
+ const orgA = orgScope();
161
+ const orgB = orgScope();
162
+ await driver.grant(alice, 'editor', APP_SCOPE);
163
+ await driver.grant(alice, 'org-editor', orgA);
164
+ await driver.grant(alice, 'org-editor', orgB);
165
+ await driver.deny(alice, 'docs:write', orgB);
166
+ const scopes = await driver.listScopes(alice, 'docs:write');
167
+ const keys = scopes.map((s) => `${s.type}:${s.uuid ?? ''}`);
168
+ assert.includeMembers(keys, ['app:', `organization:${orgA.uuid}`]);
169
+ assert.notInclude(keys, `organization:${orgB.uuid}`);
170
+ });
171
+ test('revoke/removeDeny inexistentes son no-ops seguros', async ({ assert }) => {
172
+ const ghost = subject();
173
+ await driver.revoke(ghost, 'editor', APP_SCOPE);
174
+ await driver.removeDeny(ghost, 'docs:read', APP_SCOPE);
175
+ assert.isFalse(await driver.authorize(ghost, 'docs:read', APP_SCOPE));
176
+ });
177
+ test('listRoles: roles directos vigentes en el scope exacto', async ({ assert }) => {
178
+ const alice = subject();
179
+ const orgA = orgScope();
180
+ await driver.grant(alice, 'editor', APP_SCOPE);
181
+ await driver.grant(alice, 'viewer', APP_SCOPE, {
182
+ expiresAt: new Date(Date.now() - 60_000), // expirado: no cuenta
183
+ });
184
+ await driver.grant(alice, 'org-editor', orgA);
185
+ const appRoles = await driver.listRoles(alice, APP_SCOPE);
186
+ assert.deepEqual(appRoles.sort(), ['editor']);
187
+ // El scope exacto manda: en la org NO aparece el rol de app (eso es
188
+ // herencia de authorize/hasRole, no membresía directa).
189
+ const orgRoles = await driver.listRoles(alice, orgA);
190
+ assert.deepEqual(orgRoles, ['org-editor']);
191
+ assert.deepEqual(await driver.listRoles(subject(), APP_SCOPE), []);
192
+ });
193
+ test('listRoleScopes: scopes del tipo con algún rol directo vigente', async ({ assert }) => {
194
+ const alice = subject();
195
+ const orgA = orgScope();
196
+ const orgB = orgScope();
197
+ await driver.grant(alice, 'org-editor', orgA);
198
+ await driver.grant(alice, 'org-editor', orgB, {
199
+ expiresAt: new Date(Date.now() - 60_000), // expirado: fuera
200
+ });
201
+ await driver.grant(alice, 'editor', APP_SCOPE);
202
+ const orgs = await driver.listRoleScopes(alice, 'organization');
203
+ assert.deepEqual(orgs.map((s) => s.uuid), [orgA.uuid]);
204
+ // El tipo filtra: el grant a nivel app no aparece como organization.
205
+ const apps = await driver.listRoleScopes(alice, 'app');
206
+ assert.lengthOf(apps, 1);
207
+ assert.isNull(apps[0].uuid);
208
+ });
209
+ });
210
+ }
211
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/testing/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Suite de contrato del paquete — el juez de cualquier driver.
3
+ *
4
+ * import { runAuthorizationDriverContract } from '@jantstack/adonis-authz/testing'
5
+ *
6
+ * Requiere Japa en el proyecto consumidor (es donde vive la base de datos
7
+ * real contra la que tiene sentido ejecutarla).
8
+ */
9
+ export { runAuthorizationDriverContract } from './contract.js';
10
+ export type { DriverContractHarness } from './contract.js';
11
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/testing/main.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAA;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Suite de contrato del paquete — el juez de cualquier driver.
3
+ *
4
+ * import { runAuthorizationDriverContract } from '@jantstack/adonis-authz/testing'
5
+ *
6
+ * Requiere Japa en el proyecto consumidor (es donde vive la base de datos
7
+ * real contra la que tiene sentido ejecutarla).
8
+ */
9
+ export { runAuthorizationDriverContract } from './contract.js';
10
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/testing/main.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Scopes de query sobre el motor de autorización propio — paridad con los
3
+ * whereRoles/wherePermissions del paquete extirpado, ahora sobre `authz_*`.
4
+ *
5
+ * Filtra holders del modelo con asignación VIGENTE (sin expirar) del rol o
6
+ * permiso, en cualquier scope. Es un listado grueso (¿quién tiene X?): el
7
+ * enforcement fino por scope+denies lo hace `authorization.authorize()`.
8
+ *
9
+ * El morph name del holder sale del decorador @MorphMap del modelo.
10
+ *
11
+ * Admin.query().withScopes((s) => s.whereRoles('superadmin'))
12
+ * User.query().withScopes((s) => s.wherePermissions('audit:read'))
13
+ */
14
+ export declare function withAuthzScopes<T extends {
15
+ new (...args: any[]): {};
16
+ }>(Base: T): {
17
+ new (...args: any[]): {};
18
+ whereRoles: import("@adonisjs/lucid/types/model").QueryScope<import("@adonisjs/lucid/types/model").LucidModel, (query: any, ...roles: string[]) => void>;
19
+ wherePermissions: import("@adonisjs/lucid/types/model").QueryScope<import("@adonisjs/lucid/types/model").LucidModel, (query: any, ...permissions: string[]) => void>;
20
+ } & T;
21
+ //# sourceMappingURL=authz_scopes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authz_scopes.d.ts","sourceRoot":"","sources":["../../../src/traits/authz_scopes.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,IAAI,EAAE,CAAC;kBAArB,GAAG,EAAE;2HAEzB,GAAG,YAAY,MAAM,EAAE;iIAajB,GAAG,kBAAkB,MAAM,EAAE;MAcxE"}
@@ -0,0 +1,45 @@
1
+ import { scope } from '@adonisjs/lucid/orm';
2
+ import db from '@adonisjs/lucid/services/db';
3
+ /**
4
+ * Scopes de query sobre el motor de autorización propio — paridad con los
5
+ * whereRoles/wherePermissions del paquete extirpado, ahora sobre `authz_*`.
6
+ *
7
+ * Filtra holders del modelo con asignación VIGENTE (sin expirar) del rol o
8
+ * permiso, en cualquier scope. Es un listado grueso (¿quién tiene X?): el
9
+ * enforcement fino por scope+denies lo hace `authorization.authorize()`.
10
+ *
11
+ * El morph name del holder sale del decorador @MorphMap del modelo.
12
+ *
13
+ * Admin.query().withScopes((s) => s.whereRoles('superadmin'))
14
+ * User.query().withScopes((s) => s.wherePermissions('audit:read'))
15
+ */
16
+ export function withAuthzScopes(Base) {
17
+ return class extends Base {
18
+ static whereRoles = scope((query, ...roles) => {
19
+ const model = query.model;
20
+ const morph = model.prototype.__morphMapName;
21
+ const sub = db
22
+ .from('authz_assignments as a')
23
+ .join('authz_roles as r', 'r.uuid', 'a.role_uuid')
24
+ .where('a.holder_type', morph)
25
+ .whereIn('r.slug', roles)
26
+ .where((b) => b.whereNull('a.expires_at').orWhere('a.expires_at', '>', new Date()))
27
+ .select('a.holder_uuid');
28
+ query.whereIn(model.primaryKey, sub);
29
+ });
30
+ static wherePermissions = scope((query, ...permissions) => {
31
+ const model = query.model;
32
+ const morph = model.prototype.__morphMapName;
33
+ const sub = db
34
+ .from('authz_assignments as a')
35
+ .join('authz_role_permissions as rp', 'rp.role_uuid', 'a.role_uuid')
36
+ .join('authz_permissions as p', 'p.uuid', 'rp.permission_uuid')
37
+ .where('a.holder_type', morph)
38
+ .whereIn('p.slug', permissions)
39
+ .where((b) => b.whereNull('a.expires_at').orWhere('a.expires_at', '>', new Date()))
40
+ .select('a.holder_uuid');
41
+ query.whereIn(model.primaryKey, sub);
42
+ });
43
+ };
44
+ }
45
+ //# sourceMappingURL=authz_scopes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authz_scopes.js","sourceRoot":"","sources":["../../../src/traits/authz_scopes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAE5C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAyC,IAAO;IAC7E,OAAO,KAAM,SAAQ,IAAI;QACvB,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,KAAU,EAAE,GAAG,KAAe,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAA;YAC5C,MAAM,GAAG,GAAG,EAAE;iBACX,IAAI,CAAC,wBAAwB,CAAC;iBAC9B,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,aAAa,CAAC;iBACjD,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;iBAC7B,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;iBACxB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;iBAClF,MAAM,CAAC,eAAe,CAAC,CAAA;YAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC,KAAU,EAAE,GAAG,WAAqB,EAAE,EAAE;YACvE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAA;YAC5C,MAAM,GAAG,GAAG,EAAE;iBACX,IAAI,CAAC,wBAAwB,CAAC;iBAC9B,IAAI,CAAC,8BAA8B,EAAE,cAAc,EAAE,aAAa,CAAC;iBACnE,IAAI,CAAC,wBAAwB,EAAE,QAAQ,EAAE,oBAAoB,CAAC;iBAC9D,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;iBAC7B,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC;iBAC9B,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;iBAClF,MAAM,CAAC,eAAe,CAAC,CAAA;YAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;KACH,CAAA;AACH,CAAC"}