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

Laravel 自定义portal_users表实现外部用户登录及角色权限方案咨询

问题1:指定认证校验数据表的实现方案

Laravel的认证逻辑通过Guard和用户提供者组合实现,默认调用users表对应配置,你可以按以下步骤配置外部用户专属的认证规则:

  1. 先创建对应portal_users表的模型App\Models\PortalUser,继承Illuminate\Foundation\Auth\User类(和默认User模型父类一致),指定表属性:
protected $table = 'portal_users';
  1. 打开config/auth.php新增自定义提供者和Guard:
return [
    // 其他配置不变
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        // 新增外部用户专属Guard
        'portal' => [
            'driver' => 'session',
            'provider' => 'portal_users',
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
        // 新增外部用户提供者,绑定PortalUser模型
        'portal_users' => [
            'driver' => 'eloquent',
            'model' => App\Models\PortalUser::class,
        ],
    ],
];
  1. 修改外部用户的登录代码,指定使用portal Guard校验:
public function store(Request $request) {
    $this->validate($request, [
        'email' => 'required|email',
        'password' => 'required',
    ]);

    if(!auth()->guard('portal')->attempt($request->only('email', 'password'), $request->remember)) {
        return back()->with('status', '登录信息错误');
    }

    return redirect()->route('portal.home');
}

后续调用外部用户的登录态也需要指定Guard,比如auth()->guard('portal')->user()获取当前登录的外部用户信息。

问题2:单表加角色 vs 多套认证逻辑选型
  • 如果两类用户的字段重合度高、仅权限规则不同,推荐直接在默认users表新增role字段做角色区分,不需要单独建表和多套认证,后续通过中间件做权限拦截即可,维护成本更低。
  • 如果两类用户的业务场景完全隔离、字段差异大、数据不允许混存,再选择多Guard多表的完全隔离认证方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:04