gpt4 book ai didi

php - Laravel 多种用户类型

转载 作者:可可西里 更新时间:2023-11-01 00:55:49 25 4
gpt4 key购买 nike

以下描述基于Laravel开发。

我希望实现的功能的简要描述是,

有 3 种类型的用户。 super 管理员、管理员和最终用户。

只有一个 super 管理员,他可以创建管理员和最终用户。可以存在多个管理员,并且为给定站点定义了一个管理员。管理员可以创建多个最终用户。

为了促进上述用例,我应该在 Laravel 中采用哪种方法?

到目前为止,我尝试完成此任务是:

我实现了多个守卫,然后我被卡住了,因为有些路线应该可供所有类型的用户访问。我无法使用多个守卫来完成它,因为如果我为一条路线定义多个守卫,则只有在所有多种用户类型都登录时才能访问该路线。

比如说,我有一条由 Superadmin 和 Admin 保护的路由,只有当我以 Superadmin 身份登录时,这条路由才可用。仅当 super 管理员和管理员都登录时路由才可用。

似乎如果我们分配多个守卫,守卫是ANDed。但我需要对它们进行OR运算。

守卫任务:

Route::group(['middleware' => ['auth:superadmin', 'auth:admin']], function() {...

最佳答案

我会将 SuperAdmin、Admin 和 EndUser 分离到执行简单角色检查的单独中间件中,而不是 Guards。例如 SuperAdmin 中间件:

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->isSuperAdmin) {
return $next($request);
}

abort(404);
}

然后是常规管理员

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->isSuperAdmin || Auth::user()->isAdmin) {
return $next($request);
}

abort(404);
}

然后最后对经过身份验证的用户(即 EndUser)进行简单检查

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check()) {
return $next($request);
}

abort(404);
}

然后您可以根据需要将中间层应用于您的组。

Route::group(['middleware' => ['superadmin']], function() {...

Route::group(['middleware' => ['admin']], function() {...

Route::group(['middleware' => ['enduser']], function() {...

关于php - Laravel 多种用户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44602348/

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