@@ -223,23 +223,32 @@ class RoleBaseAccessFallbackController implements RoleBaseAccessController {
223223 }
224224
225225 async apiKeyPresets ( _organizationId : string ) {
226- return null ;
226+ return [
227+ {
228+ id : FULL_ACCESS_PRESET_ID ,
229+ label : "No restrictions" ,
230+ description : "Full access to this environment, matching the root API key." ,
231+ scopes : [ "admin" ] ,
232+ usesTaskSelection : false ,
233+ available : true ,
234+ } ,
235+ ] ;
227236 }
228237
229238 async prepareApiKeyPolicy ( params : {
230239 organizationId : string ;
231240 presetId : string ;
232241 taskIdentifiers ?: string [ ] ;
233242 } ) {
234- // Without a plugin there is no preset catalogue, so full access is the only
235- // policy on offer — but the caller still has to ask for it by name. Any
236- // other preset, or any task selection, is a restricted key and unavailable.
243+ // Full access is the only policy on offer without a plugin, but the caller
244+ // still has to ask for it by name. Any other preset, or any task selection,
245+ // is a restricted key and unavailable.
237246 if ( params . presetId !== FULL_ACCESS_PRESET_ID || ( params . taskIdentifiers ?. length ?? 0 ) > 0 ) {
238247 return { ok : false as const , error : "API key access presets are not available" } ;
239248 }
240249
241- // `presetId: null` because this install has no catalogue to reference — the
242- // key is full-access, not an instance of a named preset.
250+ // Persist no preset ID: this is the standalone full-access policy rather
251+ // than an enterprise plugin-defined preset.
243252 return {
244253 ok : true as const ,
245254 policy : { presetId : null , scopes : [ "admin" ] } ,
0 commit comments