通过中间件进行Laravel授权


࿏自ོ༾由ོ༽人͙⃡⌇
2025-03-13 01:16:25 (26天前)


我创造了一个

政策
</跨度>
在laravel 5.3中有两个动作:

class ProjectPolicy {

公共功能索引(用户$用户)
{
返回true;
}
public function create(User $ user锟笨(‘projects’,‘ProjectController’);
});

当然我已经创建了Project model和

调节器
</跨度>
正确,但调用索引和创建操作始终返回403禁止响应。这个问题在哪里?

2 条回复
  1. 0# ❀⚘粉༵红༵回༵忆༵⚘❀ | 2019-08-31 10-32



    通过文档查看

    can

    中间件并不真正适用于资源。您可以在组上使用多个中间件调用,但这意味着您的使用将需要所有权限才能访问路由。



    您的替代方案是:





    $this->authorize(new App\Project)

    到你的

    index



    create

    控制器中的方法。 Laravel将使用反射来根据调用它的方法确定要使用的策略。



    要么



    在里面

    __construct()

    您可以使用的控制器方法:




    1. $this->authorizeResource(App\Project::class);

    2. </code>


    这将需要你
    创建

    update



    view



    delete

    Policy类中的方法。将传递这些方法中的每一种

    User $user, Project $project

    例如




    1. public function view(User $user, Project $project)
      {
      return true;
      }

    2. </code>


    仅供参考,如果您省略方法名称

    authorize()

    或者你用

    authorizeResource()

    Laravel会将某些方法名称映射到不同的策略方法,即:




    1. [
      //ControllerMethod => PolicyMethod
      show => view’,
      create => create’,
      store => create’,
      edit => update’,
      update => update’,
      destroy => delete’,
      ];

    2. </code>


    你可以通过添加一个来覆盖它

    resourceAbilityMap()

    控制器的方法,并返回上面的一个不同的数组。



    希望这可以帮助!


登录 后才能参与评论