Laravel 5.8 - Авторизация работает без регистрации ProjectPolicy в AuthServicerProvider.php


Я с нуля слежу за лараками Джеффри Уэя, и он упоминает о регистрации ProjectPolicy.php в AuthServiceProvider.php. Однако я попытался обновить страницу авторизации, чтобы проверить другую учетную запись, не делая этого, и она все еще работает.

Это странный вопрос, потому что я думаю, что трачу время на то, что работает, и мне не о чем беспокоиться. Ниже приведен фрагмент кода.

Я попытался прокомментировать довольно много LoC, которые, как я думал, могут быть использованы фреймворком для авторизации страниц -

ProjectsController.php

public function __construct(){

      // $this->middleware('auth'); 

    }

неотредактированная версия вопроса здесь.
метод show () в ProjectsController.php

  public function show(Project $project, Twitter $twitter)
    {
        // $twitter = app('twitter');
        // dd($twitter);

        // abort_if($project->owner_id !== auth()->id(),403);
        //abort_unless();
        $this->authorize('view',$project);

        return view('project.show',compact('project'));
    }

ProjectPolicy.php


    public function view(User $user, Project $project)
    {
         return $project->owner_id == $user->id;//works even if I remove this
    }// works even if I remove the complete method.

ProjectsController.php

public function show(Project $project, Twitter $twitter)//edited
    {
        $this->authorize('view',$project);//the authorization is enabled just by this loc.

        return view('project.show',compact('project'));
    }

Я так сбит с толку, как это все еще работает.

Как фреймворк работает authorize('view',$project);, даже когда я удаляю метод view ()?

Изменить: нашел это на странице документации.

Вместо того, чтобы вручную регистрировать политики модели, Laravel может автоматически обнаруживать политики, если модель и политика соответствуют стандартным соглашениям об именах Laravel. В частности, политики должны находиться в каталоге политик ниже каталога, содержащего модели. Так, например, модели могут быть помещены в каталог приложения, а политики могут быть размещены в каталоге app / Policies. Кроме того, имя политики должно совпадать с названием модели и иметь суффикс политики. Итак, модель User будет соответствовать классу UserPolicy.


person Sambbhav Garg    schedule 10.06.2019    source источник


Ответы (1)


Вам необходимо зарегистрировать свой полис, чтобы он соответствовал вашей модели, дополнительная информация:

https://laravel.com/docs/5.8/authorization#registering-policies

Просто добавьте в свой app/Providers/AuthServiceProvider.php файл:

protected $policies = [
    Project::class => ProjectPolicy::class,
];
person Vincent Decaux    schedule 10.06.2019