#php #laravel #policies
#php #laravel #Политики
Вопрос:
У меня есть контроллер, в котором в своей функции он проверяет политику, назначенную модели Post :
Приложение Http Контроллеры PostController
class PostController extends Controller
{
public function index(Request $request, Post $post) {
$response = Gate::inspect('viewAny', $post);
if ($response->allowed()) {
echo 'valid';
} else {
echo 'invalid';
}
}
}
Файл: PostPolicy
public function viewAny(User $user)
{
return $user->role === 'admin' ? Response::allow() : Response::deny();
}
когда пользователь входит в систему как администратор, он возвращает сообщение о вошедшем администраторе, когда он не является администратором, он возвращает ответ 403, я хотел бы заменить этот ответ 403 сообщением типа «Пользователь не является администратором»
Комментарии:
1. Взгляните на ответы политики .
2. я использую перевод laravel
3. когда я изменяю, чтобы
return $user->role === 'admins' ? Response::allow() : Response::deny('User is not administrator');
вернуть страницу 403 с сообщением Пользователь не администратор, но я хочу вернуть, например, false , и на контроллере, если ответ false , я что-нибудь сделаю.4. вы можете использовать abort_if(!$user-> can(‘viewAny’, Модель::класс), Response::HTTP_FORBIDDEN, ‘ответное сообщение’);
Ответ №1:
Вы можете использовать методы can()
и cant()
для пользовательской модели в вашем контроллере:
if ($user->cant('view-any', $post)) {
return 'User is not administrator';
}
Источник: Документы Laravel — Авторизация