for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
/**
* Created on 07/03/18 by enea dhack.
*/
namespace Enea\Authorization\Drivers\Database;
use Enea\Authorization\Contracts\DeniableOwner;
use Enea\Authorization\Contracts\PermissionsOwner;
use Enea\Authorization\Contracts\RolesOwner;
class PermissionEvaluator extends Evaluator
{
public function evaluate(PermissionsOwner $owner, array $permissions): bool
if ($this->allWereDenied($owner, $permissions)) {
return false;
}
return $this->existsInRoles($owner, $permissions) || $this->has($owner->permissions()->getQuery())($permissions);
private function existsInRoles(PermissionsOwner $owner, array $permissions): bool
if ($owner instanceof RolesOwner) {
return $owner->roles()->limit(1)->whereHas('permissions', $this->same($permissions))->exists();
private function allWereDenied(PermissionsOwner $owner, array $permissions): bool
if ($owner instanceof DeniableOwner) {
return $owner->denied()->whereIn('secret_name', $permissions)->count('permissions.id') === count($permissions);