Laravel 5.8-授权工作无需在AuthServicerProvider.php

时间:2019-06-10 12:35:24

标签: php laravel laravel-5 laravel-5.8 laravel-authorization


我从头开始关注Jeffrey Way的电视广播,他提到在AuthServiceProvider.php中注册ProjectPolicy.php。但是,我尝试刷新身份验证页面以检查其他帐户,但没有执行,

这是一个奇怪的问题,因为我认为我在把时间花在一些行之有效的事情上,我不应该担心。 下面是代码段。

我尝试注释了很多LoC,我认为该LoC可以被框架用来授权页面-

ProjectsController.php

public function __construct(){

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

    }

问题的未编辑版本,在这里。
ProjectsController.php中的show()方法

  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目录中,而将策略放置在app / Policies目录中。此外,策略名称必须与模型名称匹配,并具有策略后缀。因此,User模型将对应于UserPolicy类。

1 个答案:

答案 0 :(得分:0)

您需要注册自己的政策以适合您的模型,更多信息:

  

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

在您的app/Providers/AuthServiceProvider.php文件中,只需添加:

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