Определите политику для функций с именем FeaturePolicy
и зарегистрируйте ее в AuthServiceProvider
следующим образом:
protected $policies = [
'App\Models\Feature' => 'App\Policies\FeaturePolicy',
];
Тогда в ваших контроллерах вы можете проверить способность следующим образом:
// $feature is some feature
$this->authorize('edit', $feature);
$this->authorize('delete', $feature);
$this->authorize('read', $feature);
// ...
Теперь пришло время определить методы edit
, delete
и read
в классе FeaturePolicy
, например, для удаления:
function delete(User $user, Feature $feature) {
return $feature->roles()->where('id', $user->role_id)->wherePivot('can_delete', true)->exists();
}
Вы можете реализовать другие методы, просто отредактировав условие запроса, вам придется жестко их кодировать, потому что нет возможности использовать политики с параметрами.