首页 > 解决方案 > 如何在 Laravel 中将策略功能与中间件一起使用?

问题描述

我通过在策略中定义一个函数来使用中间件,如下所示:

在 UserPolicy.php 中:

    public function accessUser(User $user)
    {
        return $user->inRole('admin');
    }

    public function manageUser(User $user, User $secondUser)
    {
        return $user->inRole('admin') || $secondUser->id === $user->id;
    }

在 UserController.php 中:

public function __construct()
{
    $this->middleware('can:accessUser', ['except' => ['show']]);
}

public function index(Request $request)
{
    ...
}

public function show(Request $request, User $user)
{   
    $this->authorize('manageUser', $user);
    ...
}

我正在使用admin帐户。它适用于show功能,但不适用于index功能。为什么??我该怎么办?还有其他地方我应该定义accessUser功能吗?

标签: phplaravelmiddlewarepolicy

解决方案


此外,应该通过中间件将模型发送到策略..

 public function __construct()
 {
     $this->middleware('can:accessUser, App\Models\User', ['except' => ['show']]);
 }

它运作良好:)


推荐阅读