Laravel 自定义用户模型策略问题

Laravel Custom User Model Policy Issue

提问人:Firas Miladi 提问时间:11/15/2023 最后编辑:Firas Miladi 更新时间:11/16/2023 访问量:27

问:

我正在开发一个Laravel项目,我有一个自定义用户模型(管理模型)。我正在尝试为 ThirdParty 模型创建策略,但即使从策略方法返回 true,我也始终遇到“操作未经授权”错误。

这是策略方法:

public function view(?Admin $admin, ThirdParty $thirdParty)
{
    return true;
}

我已在 AuthServiceProvider 中注册了该策略,如下所示: 使用 App\Models\ThirdParty; 使用 App\Policies\ThirdPartyPolicy;

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        ThirdParty::class => ThirdPartyPolicy::class,
    ];
    // ...
}

这就是我在api.php中应用它的方式:

Route::get('show/{id}', [ThirdPartyController::class, 'show'])->can('view', 'thirdParty');

最后,控制器操作如下所示:

public function show(Request $request, ThirdParty $thirdParty)
{
    // ...
}

我试过die();在策略方法中,但它没有用 我想要解决我的问题

Laravel Web 授权 后端 策略

评论

0赞 Yoweli Kachala 11/15/2023
我认为这里缺少信息。你所给出的不足以告诉你问题可能是什么。
0赞 Firas Miladi 11/15/2023
你还需要什么来判断问题是什么?@YoweliKachala
0赞 Yoweli Kachala 11/15/2023
所提供的信息不足以准确识别问题。例如,在控制器中使用 authorize 方法时,确保正确的授权逻辑至关重要。身份验证确认也是必不可少的,因为没有它,用户将缺少关联的角色或权限。此外,在方法签名公共函数 view(?管理员$admin,第三方$thirdParty),使用用户$user而不是管理员$admin可能更合适,允许进行$user->is_admin等检查来确定用户的管理状态。

答:

0赞 Firas Miladi 11/16/2023 #1

我找到了一个解决方案,我刚刚删除了这个:

->can('view', 'thirdParty')

from 并将其替换为api.php

$this->authorize('view', ThirdParty::class);

在控制器操作中,它对我有用!