PostVoter::supports()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Explicit Architecture POC,
7
 * which is created on top of the Symfony Demo application.
8
 *
9
 * (c) Herberto Graça <[email protected]>
10
 *
11
 * For the full copyright and license information, please view the LICENSE
12
 * file that was distributed with this source code.
13
 */
14
15
namespace Acme\App\Core\Component\Blog\Application\Auth;
16
17
use Acme\App\Core\Component\Blog\Domain\Post\Post;
18
use Acme\App\Core\Port\Auth\Authorization\ResourceActionVoterInterface;
19
use Acme\App\Core\SharedKernel\Component\User\Domain\User\UserId;
20
21
final class PostVoter implements ResourceActionVoterInterface
22
{
23
    /**
24
     * @param Post $subject
25
     */
26
    public function supports(string $attribute, $subject): bool
27
    {
28
        // this voter is only executed for three specific permissions on Post objects
29
        return $subject instanceof Post && \in_array($attribute, [self::SHOW, self::EDIT, self::DELETE], true);
30
    }
31
32
    public function voteOnAttribute(string $attribute, Post $post, UserId $userId): bool
33
    {
34
        // the logic of this voter is pretty simple: if the logged user is the
35
        // author of the given blog post, grant permission; otherwise, deny it.
36
        // (the supports() method guarantees that $post is a Post object)
37
        return $userId->equals($post->getAuthorId());
38
    }
39
}
40