Я храню список разрешений в базе данных.
У меня есть контроллер ресурса:
class UserController extends Controller {
public function store(Request $request) {
if (Gate::denies('create-user', User::class)) {
}
/**
when I use controller helper it throws
Illuminate\Auth\Access\AuthorizationException
like this $this->authorize('create-user', User::class);
*/
return response()->json(User::create($request->validated()));
}
}
В моем случае удобнее использовать Gate :: позволяет способ, потому чтоУ меня есть определенный список разрешений.
Но как мне выбросить Подсветка \ Аутентификация \ Доступ \ AuthorizationException ?если у пользователя нет разрешения на это действие.
Я должен использовать Gate :: позволяет вместо $ this-> authorize , потому что в моем UserPolicy я должен указать имяразрешение вроде этого:
class UserPolicy
{
use HandlesAuthorization;
public function create(User $user)
{
$has = MyPermissionModel::hasAccess($user, 'create-user');
return $has;
}
}
Но если я использую Gates , это кажется более ясным и правильным:
class AuthServiceProvider extends ServiceProvider
{
public function boot()
{
Gate::define('create-user', 'App\Policies\UserPolicy@create');
}
}
И теперь яможно проверять доступ где угодно, а не только внутри UserController .
Итак, мои вопросы:
Какой способ лучшепроверить разрешения при динамическом хранении моих разрешений в БД?
Как вывести исключение Illuminate \ Auth \ Access \ AuthorizationException?если я использую Гейтс .