【问题标题】:Access oly for admins仅限管理员访问
【发布时间】:2021-12-13 04:04:28
【问题描述】:

我想制作只允许管理员访问的中间件。在 Sanctum 中有点复杂,因为如果我尝试(在中间件中)显示它

dd(Auth::user())

它返回空值。但是 api.php 中的相同代码显示了用户的详细信息。所以我知道我可以编写这段代码(我使用 httponly cookie),但它丑陋、复杂而且我不确定它是否安全。

$cookie = $request->cookie('user');
$explodeFields = explode(',', $cookie);
$role = explode(':', $explodeFields[4])[1];
dd($role);

用户表有一列“role”,然后是用户的角色,例如“admin”。在中间件中,我想检查用户是否是管理员,如果是,则允许访问。怎么做?

【问题讨论】:

    标签: laravel api jwt laravel-sanctum


    【解决方案1】:

    我建议您在用户模型上添加某种用户级别作为列。如果你只想要管理员和非管理员,你可以有一个名为 is_admin 的布尔值。然后你可以创建一个看起来像这样的中间件:

    public function handle($request, Closure $next)
    {
        if (Auth::user()->is_admin == true) {
             return $next($request);
        }
    
        return abort(404);
    }
    

    将此中间件应用于您希望仅限管理员使用的路由。

    【讨论】:

    • 我理解你的想法,但这是不可能的,因为就像我之前在中间件中所说的那样 Auth::user() 返回 null。我们一直在谈论 Sanctum 和使用 api.php,而不是 web.php。在 api.php 我可以返回 Auth::user().
    猜你喜欢
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多