【发布时间】:2021-04-11 23:09:17
【问题描述】:
我正在尝试将 Laravel 授权策略与 API 和 Sanctum 一起使用。但是,我在路由上使用中间件如下。
Route::get('/user/orders/{order}',
[OrderController::class, 'get_user_order_detail'])
->middleware('can:view:order');
OrderPolicy.php
namespace App\Policies;
use App\Models\Order;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class OrderPolicy
{
use HandlesAuthorization;
/**
* Create a new policy instance.
*
* @return void
*/
public function __construct()
{
// dd(1);
}
public function view(User $user, Order $order): bool
{
return $user->id === $order->user_id;
}
}
如您所见,当我在 OrderPolicy 的构造函数中添加 dd(1) 时,我得到了预期的 1,但是当我将它移到 view 函数的内部时,我得到了 unauthorized,这表明那可能是 view 函数本身没有被调用,但是 OrderPolicy 被调用了。
【问题讨论】:
-
不是应该自动发现吗?根据文档,如果我将我的警察命名为 ModelPolicy 并且它处于或高于模型级别,那么它应该被自动发现,并且如您所见,正在调用该类的构造函数,但不是所需的函数
-
正在工作。?不工作所以就用这个
-
它不会自动注册。因为 laravel Auth Service Provider 不知道要添加什么规则。 @KamleshPaul 为您提供了正确答案。
-
使用
can:view,order而不是第二个:
标签: laravel laravel-8 laravel-authorization