canAccessTenant($tenant)) { return false; } return app(CapabilityResolver::class)->can($user, $tenant, Capabilities::TENANT_REVIEW_VIEW); } public function view(User $user, TenantReview $review): Response|bool { $tenant = $this->authorizedTenantOrNull($user, $review); if (! $tenant instanceof Tenant) { return Response::denyAsNotFound(); } return app(CapabilityResolver::class)->can($user, $tenant, Capabilities::TENANT_REVIEW_VIEW) ? true : Response::deny(); } public function create(User $user): bool { $tenant = Tenant::current(); if (! $tenant instanceof Tenant || ! $user->canAccessTenant($tenant)) { return false; } return app(CapabilityResolver::class)->can($user, $tenant, Capabilities::TENANT_REVIEW_MANAGE); } public function refresh(User $user, TenantReview $review): Response|bool { return $this->authorizeManageAction($user, $review); } public function publish(User $user, TenantReview $review): Response|bool { return $this->authorizeManageAction($user, $review); } public function archive(User $user, TenantReview $review): Response|bool { return $this->authorizeManageAction($user, $review); } public function export(User $user, TenantReview $review): Response|bool { return $this->authorizeManageAction($user, $review); } public function createNextReview(User $user, TenantReview $review): Response|bool { return $this->authorizeManageAction($user, $review); } private function authorizeManageAction(User $user, TenantReview $review): Response|bool { $tenant = $this->authorizedTenantOrNull($user, $review); if (! $tenant instanceof Tenant) { return Response::denyAsNotFound(); } return app(CapabilityResolver::class)->can($user, $tenant, Capabilities::TENANT_REVIEW_MANAGE) ? true : Response::deny(); } private function authorizedTenantOrNull(User $user, TenantReview $review): ?Tenant { $tenant = $review->tenant; if (! $tenant instanceof Tenant) { return null; } if (! $user->canAccessTenant($tenant)) { return null; } if ((int) $review->workspace_id !== (int) $tenant->workspace_id) { return null; } return $tenant; } }