<?php

declare(strict_types=1);

/*
 * Chill is a software for social workers
 *
 * For the full copyright and license information, please view
 * the LICENSE file that was distributed with this source code.
 */

namespace Chill\DocStoreBundle\Security\Authorization;

use Chill\DocStoreBundle\Entity\StoredObject;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;

/**
 * Interface for voting on stored object permissions.
 *
 * Each time a stored object is attached to a document, the voter is responsible for determining
 * whether the user has the necessary permissions to access or modify the stored object.
 */
interface StoredObjectVoterInterface
{
    public function supports(StoredObjectRoleEnum $attribute, StoredObject $subject): bool;

    public function voteOnAttribute(StoredObjectRoleEnum $attribute, StoredObject $subject, TokenInterface $token): bool;
}
