Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 7 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
HasRole | |
0.00% |
0 / 7 |
|
0.00% |
0 / 2 |
12 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
applies | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | namespace Apie\Core\Attributes; |
3 | |
4 | use Apie\Common\Interfaces\HasRolesInterface; |
5 | use Apie\Core\Context\ApieContext; |
6 | use Apie\Core\ContextConstants; |
7 | |
8 | /** |
9 | * Tell Apie you need to be logged in with a specific role to see/execute a class/method/property. |
10 | */ |
11 | final class HasRole implements ApieContextAttribute |
12 | { |
13 | /** @var array<int, string> */ |
14 | public readonly array $roles; |
15 | public function __construct( |
16 | string... $roles |
17 | ) { |
18 | $this->roles = $roles; |
19 | } |
20 | public function applies(ApieContext $context): bool |
21 | { |
22 | $user = $context->getContext(ContextConstants::AUTHENTICATED_USER, false); |
23 | if ($user instanceof HasRolesInterface) { |
24 | $roles = $user->getRoles()->toArray(); |
25 | $diff = array_intersect($this->roles, $roles); |
26 | return !empty($diff); |
27 | } |
28 | |
29 | return false; |
30 | } |
31 | } |