【发布时间】:2020-11-23 08:17:46
【问题描述】:
我有两种类型的用户角色。管理员和经理。管理员可以访问所有路由,但管理员只能访问其中的一些。我的大部分路线都是资源路线。目前我有这个管理员路由组:
Route::middleware(['auth', 'admin'])->prefix('admin')->group(function () {
Route::resource('post','PostController')
}
如果您需要检查,这是我的“管理员”中间件:
if (!Auth::user()->isAdmin())
{
return redirect('/home');
}
return $next($request);
在这里,管理员可以访问所有路线。但我想允许经理访问某些路线,例如post.index, post.show, post.edit。
我现在该怎么办?
下面我用例子详细解释我的问题
我有三个中间件,auth, manager, admin。顾名思义,auth 中间件检查用户是否经过身份验证,manager 中间件检查用户是否为经理,当然admin 中间件检查用户是否为管理员。
现在,对于Route::resource('post','PostController') 路由,
-
auth可以访问post.index, post.view -
manager可以访问post.index, post.view, post.edit -
admin可以访问所有路由。 应用中间件解决问题的最佳方法是什么?
【问题讨论】:
-
定义路由组并分配特定于这些组的中间件。如果想要更多地控制访问级别,请使用 ACL。
-
所有路由都有前缀
admin。如果您授予某些admin路由的管理器访问权限,则至少应相应修改 URL。
标签: php laravel middleware laravel-middleware