Я постараюсь объяснить. Я занимаюсь разработкой приложения для электронной коммерции и для обеспечения бэкэнд-авторизации я применил Политики laravel к Модели (модели продукта).
Проблема возникает, когда я пытался использовать одну и ту же модель продукта в представлениях веб-интерфейса, где все пользователи могут видеть продукты.
Политики применяются ко всей модели, независимо от того, защищено ли представление маршрута, и я не могу найти способ оставить некоторые представления (например, frontend> list products), получая информацию из модели без политики авторизации.
Например: политики, примененной к View в бэкэнде:
public function view(User $user)
{
$method = (string)$this->ability;
if ($user->hasRole($this->Model) === null) {
return 0;
}
return $user->hasRole($this->Model)->$method;
}
Мне нужно создать еще одну общедоступную функцию в политике продуктов, в которой перечислены продукты в веб-интерфейсе, не запрашивая авторизацию у пользователя.
Благодарю.
Возможно, вы захотите создать функцию конструктора в вашем контроллере, которая позволит неаутентифицированным пользователям получать доступ к представлению продуктов. Следующий фрагмент обеспечивает доступ ко всем функциям контроллера, кроме функции уничтожения (уничтожения сеанса, выхода из системы).
public function __construct()
{
$this->middleware('guest', ['except' => 'destroy']);
}
Я надеюсь, что это поможет вам в правильном направлении.
Других решений пока нет …