gpt4 book ai didi

php - 用于管理员和用户角色的 Laravel 5.4 中间件

转载 作者:行者123 更新时间:2023-12-02 17:19:37 24 4
gpt4 key购买 nike

我创建了两个名为“MustBeAdmin”和“MustBeUser”的中间件,以确保根据用户登录将他们重定向到正确的页面并限制未经授权的内容。目前一切正常,重定向也很好。但是我在幕后写的逻辑对我来说似乎是错误的,而且它仍然有效很奇怪。如果我至少编写了对我来说似乎正确的逻辑,它似乎并没有按预期工作。

用户表

id (1,2,3,...)
name
role (1,2,3,...)

角色表

id (1,2,3,...)
role (Student, Admin,...)

MustBeAdmin 中间件

public function handle($request, Closure $next)
{
if($request->user()->role == 2)
{
return $next($request);
}
else
{
return redirect('/admin/users');
}

}

MustBeUser 中间件:

public function handle($request, Closure $next)
{
if($request->user()->role == 1)
{
return $next($request);
}
else
{
return redirect('/admin/users');
}

}

内核.php

'admin' => \App\Http\Middleware\MustBeAdmin::class,
'user' => \App\Http\Middleware\MustBeUser::class,

如你所见,我已经在内核中注册了中间件。

我得到的结果正是我需要的,但我怀疑中间件中的逻辑是否正确?

1 = Student
2 = Admin

如果您在 MustBeAdmin 中间件中看到我正在比较用户角色是否为 2(管理员)然后执行下一步($request),在 MustBeUser 中间件中我正在比较如果用户角色为 1(学生)然后执行下一步($request)和我将其他设置为/Admin 目录。

我觉得不对,你怎么看?

最佳答案

您没有在中间件中检查经过身份验证的用户详细信息。中间件应该是这样的:

//for student 
public function handle($request, Closure $next)
{

if ( Auth::check() && Auth::user()->role == 1 )
{
return $next($request);
}

return redirect('/admin');

}


//for admin
public function handle($request, Closure $next)
{

if ( Auth::check() && Auth::user()->role == 2 )
{
return $next($request);
}

return redirect('/student');

}

你应该查看我关于同一主题的详细回答here

关于php - 用于管理员和用户角色的 Laravel 5.4 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43948419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com