Политика Laravel не применяется к модели автоматически - PullRequest
0 голосов
/ 28 мая 2020

Согласно документам Laravel, политика должна обнаруживаться автоматически, если она следует соглашениям об именах: она должна быть помещена в каталог Policies, ее имя должно состоять из названия модели плюс слова Policy и модели должны быть в каталоге app. В моем случае это все верно, но политика не работает.

Название модели Screen. Политика называется ScreenPolicy:

class ScreenPolicy
{
    use HandlesAuthorization;

    /**
     * Create a new policy instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    public function delete(User $user, Screen $screen)
    {
        return false;    //always return false for testing
    }
}

И в моем контроллере у меня есть следующий метод, который удаляет Screen:

public function delete(Request $request) {
    $screen = Screen::find($request->screen_id);
    $screen->delete();
    ...
}

Я ожидаю, что я не должен ' Здесь нет возможности удалить Screen, поскольку политика всегда возвращает false, однако Screen успешно удаляется вызовом этого метода. Что я делаю не так?

1 Ответ

1 голос
/ 28 мая 2020

Вам все равно нужно вызвать authorize (). Проверить документы

$screen = Screen::find($id);
if ($this->authorize('delete', $screen)) {
   $screen->delete();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...