Итак, я читал об использовании политик laravel для предоставления полномочий по ресурсам моего приложения, но, похоже, проблема там, хотя я последовали за учебником.Использование проверки this-> authorize() в контроллере laravel внутри метода store()
У меня есть пользовательская модель, которая не может быть создана по HTTP-запросам, кроме других пользователей, у которых есть Entrust роль «Admin» или «Broker». То, что я понял и сумел заставить его работать на другие действия, как пользователи индексации было следующее:
Внутри
AuthServiceProvider.php
внутри частного$policies
массива, я зарегистрировал этот класс пользователей сUserPolicy
класса, как тоткласс AuthServiceProvider расширяет ServiceProvider {
protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', User::class => UserPolicy::class, Insured::class => InsuredPolicy::class ]; public function boot(GateContract $gate) { $this->registerPolicies($gate); }
}
Определение класса контроллера UserPolicy
класса UserPolicy {
use HandlesAuthorization; protected $user; public function __construct(User $user) { $this->user = $user; } public function index(User $user) { $is_authorized = $user->hasRole('Admin'); return $is_authorized; } public function show(User $user, User $user_res) { $is_authorized = ($user->id == $user_res->id); return $is_authorized; } public function store() { $is_authorized = $user->hasRole('Admin'); return $is_authorized; }
}
Тогда внутри
UserController
класса, перед выполнением критического действия я используюthis->authorize()
проверку, чтобы остановить или продолжить в зависимости от привилегий пользователякласс UserController расширяет Контроллер {
public function index() { //temporary authentication here $users = User::all(); $this->authorize('index', User::class); return $users; } public function show($id) { $user = User::find($id); $this->authorize('show', $user); return $user; } public function store(Request $request) { $user = new User; $user->name = $request->get('name'); $user->email = $request->get('email'); $user->password = \Hash::make($request->get('password')); $this->authorize('store', User::class); $user->save(); return $user; }
}
Проблема в том, что$this->authorize()
всегда останавливает процесс на магазине действия возвращающегося исключение: Это действие является несанкционированным.
Я попробовал несколько вариантов для аргументов AUTHORIZE() и не могу заставить его работать как действие индекса
Это решило! Я помню, я пытался передать аргументы до этого метода, и тогда это не сработало. Большое спасибо –
Рад помочь, и добро пожаловать в переполнение стека. Если этот ответ решит вашу проблему, отметьте его как принятый. –