1. Go to this page and download the library: Download thomas-miceli/voters library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
thomas-miceli / voters example snippets
$permission = new \ThomasMiceli\Voter\Permission;
$permission->addVoter(new ArticleVoter); // register the voter for this permission object
$user = ...
$article = ...
$permission->can($user, ArticleVoter::VIEW, $article); // check if our user can view the article
$permission->can($user, ArticleVoter::EDIT, $article); // check if our user can edit the article
/* This voter determine what the user can do with an article from our blog. */
class ArticleVoter implements \ThomasMiceli\Voter\Voter
{
const VIEW = 'view';
const EDIT = 'edit';
// if the voter can vote for the requested attribute...
public function canVote(string $attribute, $subject = null): bool
{
return in_array($attribute, [self::EDIT, self::VIEW]) && $subject instanceof Article;
}
// ...if yes, the voter will determinate and return the permission for this attribute
public function vote(?\ThomasMiceli\Voter\VoterUser $user, string $attribute, $subject = null): bool
{
/** @var Article $subject */
switch ($attribute) {
// if the user is connected, he can read the article
case self::VIEW: return $user !== null;
// if the user is the author, he can modify the article
case self::EDIT: return $subject->getAuthor() === $user;
}
// the user has not the permission for other attributes
return false;
}
}
$permission = new \ThomasMiceli\Voter\Permission(new \ThomasMiceli\Voter\Strategy\AffirmativeStrategy); // default strategy
// $permission::can() returns true if at least one of the registered voters approved the attribute
$permission = new \ThomasMiceli\Voter\Permission(new \ThomasMiceli\Voter\Strategy\VetoStrategy);
// $permission::can() returns true if all the registered voters approved the attribute
$permission = new \ThomasMiceli\Voter\Permission(new \ThomasMiceli\Voter\Strategy\MajorityStrategy);
// $permission::can() returns true if at least half plus one of the registered voters approved the attribute
class CustomStrategy implements \ThomasMiceli\Voter\Strategy\VoterStrategy {
// the permission is granted if at least 4 voters voted true for an attribute
public function can(?\ThomasMiceli\Voter\VoterUser $user, array $voters, string $attribute, $subject): bool
{
$approvals = 0;
foreach ($voters as $voter) {
if ($voter->canVote($attribute, $subject)) {
$vote = $voter->vote($user, $attribute, $subject);
//ConsoleLogger::debug($voter, $vote, $attribute, $user, $subject);
if ($vote) {
++$approvals;
}
}
}
return $approvals > 3;
}
}
$permission = new \ThomasMiceli\Voter\Permission(new CustomStrategy);
$permission = new \ThomasMiceli\Voter\Permission(new \ThomasMiceli\Voter\Strategy\GenericStrategy(40, 5));
$permission = \ThomasMiceli\Voter\Permission::generic(40, 5);
// at least 40% and 5 voters should have approved the attribute
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.