weitere updates für instanzierbarkeit und sauberes testing

This commit is contained in:
2026-02-24 08:49:40 +01:00
parent 7b53faca37
commit 16759a2732
119 changed files with 6371 additions and 745 deletions

View File

@@ -0,0 +1,41 @@
<?php
namespace MintyPHP\Service\Access;
use Throwable;
class AuthorizationService
{
/** @var array<int, AuthorizationPolicyInterface> */
private array $policies = [];
/**
* @param array<int, AuthorizationPolicyInterface> $policies
*/
public function __construct(array $policies)
{
foreach ($policies as $policy) {
if ($policy instanceof AuthorizationPolicyInterface) {
$this->policies[] = $policy;
}
}
}
public function authorize(string $ability, array $context = []): AuthorizationDecision
{
foreach ($this->policies as $policy) {
if (!$policy->supports($ability)) {
continue;
}
try {
return $policy->authorize($ability, $context);
} catch (Throwable) {
return AuthorizationDecision::deny(500, 'authorization_failed');
}
}
return AuthorizationDecision::deny(500, 'authorization_policy_missing');
}
}