Laravel 5.8 - Авторизация работает без регистрации ProjectPolicy в AuthServicerProvider.php - PullRequest
0 голосов
/ 10 июня 2019

Я следую за ларакастами Джеффри Уэя с нуля, и он упоминает о регистрации 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.В частности, политики должны находиться в каталоге Policies под каталогом, содержащим модели.Так, например, модели могут быть размещены в каталоге приложения, в то время как политики могут быть размещены в каталоге приложения / Политики.Кроме того, имя политики должно совпадать с именем модели и иметь суффикс политики.Таким образом, модель User будет соответствовать классу UserPolicy.

1 Ответ

0 голосов
/ 10 июня 2019

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

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

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

protected $policies = [
    Project::class => ProjectPolicy::class,
];
...