Если вы пытаетесь проверить, может ли пользователь получить доступ к любому из ваших определенных шлюзов, из контроллера вы можете взять очередь из существующей Авторизируемой черты и добавить некоторые дополнительные функции в свою собственную черту..
<?php
namespace App\Traits\MyAuthorizable;
use Illuminate\Contracts\Auth\Access\Gate;
trait MyAuthorizable {
public function canAny(array $abilities, $arguments = []) {
return collect($abilities)->reduce(function($canAccess, $ability) use ($arguments) {
// if this user has access to any of the previously checked abilities, or the current ability, return true
return $canAccess || app(Gate::class)->forUser($this)->check($ability, $arguments);
}, false);
}
public function canAll(array $abilities, $arguments = []) {
return collect($abilities)->reduce(function($canAccess, $ability) use ($arguments) {
// if this user has access to _all_ of the previously checked abilities, _and_ the current ability, return true
return $canAccess && app(Gate::class)->forUser($this)->check($ability, $arguments);
}, true);
}
}
Вы можете добавить эту черту в свой пользовательский класс с помощью use App\ MyAuthorizable;
в своем определении пользовательского класса.
Это откроет методы canAny
и canAll
для вашегопользователь, к которому вы можете получить доступ с вашего контроллера.
<?php
public function get($request) {
$User = Auth::User();
if ($User->canAll(['manage_global', 'manage_users', 'create_users'])) {
// user can do all of the things
} elseif ($User->canAny(['manage_global', 'manage_users', 'create_users']) {
// user can only do _some_ of the things
} else {
// user can do _none_ of the things
}
}