in components/vam-api/packages/vam-services/lib/appstream/appstream-authz-service.js [50:92]
async authorize(requestContext, { resource, action, effect, reason }, ...args) {
if (!action) {
const noActionResult = deny(`Invalid action '${action}'`);
effect = noActionResult.effect;
reason = noActionResult.reason;
}
let permissionSoFar = { effect };
// if effect is "deny" already (due to any of the previous plugins returning "deny") then return "deny" right away
if (isDeny(permissionSoFar)) return { resource, action, effect, reason };
// Make sure the caller is active. This basic check is required irrespective of "action" so checking it here
permissionSoFar = await allowIfActive(requestContext, { action });
if (isDeny(permissionSoFar)) return permissionSoFar; // return if denying
switch (action) {
case AppstreamAuthzService.LIST_APPLICATIONS:
case AppstreamAuthzService.LIST_IMAGE_BUILDERS:
case AppstreamAuthzService.LIST_FLEETS:
case AppstreamAuthzService.LIST_DYNAMIC_CATALOGS:
case AppstreamAuthzService.GET_FLEET:
return allowIfNotGuest(requestContext, { action });
case AppstreamAuthzService.SHARE_IMAGE:
case AppstreamAuthzService.REVOKE_IMAGE_SHARING:
case AppstreamAuthzService.CREATE_FLEET:
case AppstreamAuthzService.SWAP_IMAGE:
return allowIfPoweruserOrAdmin(requestContext, { action });
case AppstreamAuthzService.START_FLEET:
case AppstreamAuthzService.STOP_FLEET:
case AppstreamAuthzService.DELETE_FLEET:
case AppstreamAuthzService.GET_FLEET_LINK:
case AppstreamAuthzService.CREATE_DYNAMIC_CATALOG:
case AppstreamAuthzService.DELETE_DYNAMIC_CATALOG:
return this.allowPowerusersAndGroupMembers(requestContext, { action }, ...args);
case AppstreamAuthzService.GRANT_ACCESS_TO_GROUP:
case AppstreamAuthzService.REVOKE_ACCESS_TO_GROUP:
return this.allowPowerusersAndGroupMembersForGroups(requestContext, { action }, ...args);
case AppstreamAuthzService.CREATE_IMAGE:
case AppstreamAuthzService.LIST_IMAGES:
case AppstreamAuthzService.DELETE_IMAGE:
return allowIfAdmin(requestContext, { action });
default:
return deny(`Unknown action: ${action}`);
}
}