@@ -68,7 +68,8 @@ class ModelConfig<T> {
6868 const ModelConfig ({
6969 required this .fromJson,
7070 required this .getId,
71- required this .getPermission,
71+ required this .getCollectionPermission, // New field for GET collection
72+ required this .getItemPermission, // New field for GET item
7273 required this .postPermission,
7374 required this .putPermission,
7475 required this .deletePermission,
@@ -86,8 +87,11 @@ class ModelConfig<T> {
8687 /// is true for any action.
8788 final String ? Function (T item)? getOwnerId;
8889
89- /// Authorization configuration for GET requests.
90- final ModelActionPermission getPermission;
90+ /// Authorization configuration for GET requests to the collection endpoint.
91+ final ModelActionPermission getCollectionPermission;
92+
93+ /// Authorization configuration for GET requests to a specific item endpoint.
94+ final ModelActionPermission getItemPermission;
9195
9296 /// Authorization configuration for POST requests.
9397 final ModelActionPermission postPermission;
@@ -120,7 +124,11 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
120124 fromJson: Headline .fromJson,
121125 getId: (h) => h.id,
122126 // Headlines: Admin-owned, read allowed by standard/guest users
123- getPermission: const ModelActionPermission (
127+ getCollectionPermission: const ModelActionPermission (
128+ type: RequiredPermissionType .specificPermission,
129+ permission: Permissions .headlineRead,
130+ ),
131+ getItemPermission: const ModelActionPermission (
124132 type: RequiredPermissionType .specificPermission,
125133 permission: Permissions .headlineRead,
126134 ),
@@ -138,7 +146,11 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
138146 fromJson: Category .fromJson,
139147 getId: (c) => c.id,
140148 // Categories: Admin-owned, read allowed by standard/guest users
141- getPermission: const ModelActionPermission (
149+ getCollectionPermission: const ModelActionPermission (
150+ type: RequiredPermissionType .specificPermission,
151+ permission: Permissions .categoryRead,
152+ ),
153+ getItemPermission: const ModelActionPermission (
142154 type: RequiredPermissionType .specificPermission,
143155 permission: Permissions .categoryRead,
144156 ),
@@ -156,7 +168,11 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
156168 fromJson: Source .fromJson,
157169 getId: (s) => s.id,
158170 // Sources: Admin-owned, read allowed by standard/guest users
159- getPermission: const ModelActionPermission (
171+ getCollectionPermission: const ModelActionPermission (
172+ type: RequiredPermissionType .specificPermission,
173+ permission: Permissions .sourceRead,
174+ ),
175+ getItemPermission: const ModelActionPermission (
160176 type: RequiredPermissionType .specificPermission,
161177 permission: Permissions .sourceRead,
162178 ),
@@ -174,7 +190,11 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
174190 fromJson: Country .fromJson,
175191 getId: (c) => c.id, // Assuming Country has an 'id' field
176192 // Countries: Admin-owned, read allowed by standard/guest users
177- getPermission: const ModelActionPermission (
193+ getCollectionPermission: const ModelActionPermission (
194+ type: RequiredPermissionType .specificPermission,
195+ permission: Permissions .countryRead,
196+ ),
197+ getItemPermission: const ModelActionPermission (
178198 type: RequiredPermissionType .specificPermission,
179199 permission: Permissions .countryRead,
180200 ),
@@ -193,7 +213,10 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
193213 getId: (u) => u.id,
194214 getOwnerId: (dynamic item) =>
195215 (item as User ).id as String ? , // User is the owner of their profile
196- getPermission: const ModelActionPermission (
216+ getCollectionPermission: const ModelActionPermission (
217+ type: RequiredPermissionType .adminOnly, // Only admin can list all users
218+ ),
219+ getItemPermission: const ModelActionPermission (
197220 type: RequiredPermissionType .specificPermission,
198221 permission: Permissions .userReadOwned, // User can read their own
199222 requiresOwnershipCheck: true , // Must be the owner
@@ -218,7 +241,10 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
218241 getId: (s) => s.id,
219242 getOwnerId: (dynamic item) =>
220243 (item as UserAppSettings ).id as String ? , // User ID is the owner ID
221- getPermission: const ModelActionPermission (
244+ getCollectionPermission: const ModelActionPermission (
245+ type: RequiredPermissionType .unsupported, // Not accessible via collection
246+ ),
247+ getItemPermission: const ModelActionPermission (
222248 type: RequiredPermissionType .specificPermission,
223249 permission: Permissions .appSettingsReadOwned,
224250 requiresOwnershipCheck: true ,
@@ -244,7 +270,10 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
244270 getId: (p) => p.id,
245271 getOwnerId: (dynamic item) => (item as UserContentPreferences ).id
246272 as String ? , // User ID is the owner ID
247- getPermission: const ModelActionPermission (
273+ getCollectionPermission: const ModelActionPermission (
274+ type: RequiredPermissionType .unsupported, // Not accessible via collection
275+ ),
276+ getItemPermission: const ModelActionPermission (
248277 type: RequiredPermissionType .specificPermission,
249278 permission: Permissions .userPreferencesReadOwned,
250279 requiresOwnershipCheck: true ,
@@ -269,9 +298,12 @@ final modelRegistry = <String, ModelConfig<dynamic>>{
269298 fromJson: AppConfig .fromJson,
270299 getId: (config) => config.id,
271300 getOwnerId: null , // AppConfig is a global resource, not user-owned
272- getPermission: const ModelActionPermission (
301+ getCollectionPermission: const ModelActionPermission (
302+ type: RequiredPermissionType .unsupported, // Not accessible via collection
303+ ),
304+ getItemPermission: const ModelActionPermission (
273305 type: RequiredPermissionType
274- .none, // Readable by any authenticated user via /api/v1/data
306+ .none, // Readable by any authenticated user via /api/v1/data/[id]
275307 ),
276308 postPermission: const ModelActionPermission (
277309 type: RequiredPermissionType .adminOnly, // Only administrators can create
0 commit comments