You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel配置Policy禁止查看他人资料却无法访问自身页面怎么解决

问题原因及修复方案

核心错误点

  • 权限判断逻辑错误:你在Policy中直接将User模型实例和整数类型的用户ID做===恒等比较,两种不同类型的变量恒等判断永远返回false,这是用户无法访问自己个人资料的核心原因。
  • 路由参数与权限中间件参数不匹配:你当前路由定义的参数是{id},但can中间件中指定的参数是user,Laravel无法自动匹配到对应的用户模型实例传入Policy,会导致Policy接收的参数不符合预期。

修复步骤

  1. 修改Policy的判断逻辑,补充参数类型约束,改为比较两个用户的ID值:
public function show(User $authenticatedUser, User $user_model)
{
    return $authenticatedUser->id === $user_model->id ? Response::allow() : Response::deny();
}
  1. 修改路由参数名,和can中间件参数对齐,开启Laravel隐式模型绑定:
Route::get('companyuser/{user}',  [CompanyUserController::class, 'show'])
    ->middleware(['role:companyuser', 'can:show,user']);
  1. 同步修改Controller中show方法的参数,匹配路由参数名:
// CompanyUserController.php
public function show(User $user)
{
    // 此处的$user已经是Laravel自动根据路由参数查询到的用户实例
}

可选操作

如果修改后仍不生效,可执行以下命令清空缓存:

php artisan route:clear
php artisan config:clear

内容的提问来源于stack exchange,提问作者user3353167

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:36:02