【发布时间】:2019-09-10 09:34:09
【问题描述】:
我有一个用户表,其中包含Enum 值的用户角色的列角色:
迁移
$table->enum('role', ['Admin','author','editor']);
我想要的是,只有 Admin 和 author 用户可以访问site.com/view/problems 这个页面。
我在 \app\http\Middleware 上创建了 3 个中间件,包含此内容。
public function handle($request, Closure $next)
{
if ($request->user() && $request->user()->role != 'Admin') {
return new Response(view('unauthorized')->with('role', 'Admin'));
}
return $next($request);
}
并将它们放入 Kernal.php
protected $routeMiddleware = [
'Admin' =>\App\Http\Middleware\AdminMiddleware::class,
'author' =>\App\Http\Middleware\authorAdminMiddleware::class,
'editor' =>\App\Http\Middleware\editorAdminMiddleware::class,
];
然后像这样在 web.php 中使用它们
Route::get('/view/problems', function () {
//
})->middleware('Admin', 'editor');
但是当我使用 Admin 用户登录时,它说您可以使用 author 用户访问此页面。
当我使用 author 用户登录时,它说您可以使用 admin 用户访问此页面。
我希望当我以 Admin 或 author 用户角色登录时,可以访问此页面。 当我使用 editor 登录时,无法访问此页面。
我也使用过中间件组。和以前一样。
我该怎么做?
【问题讨论】:
-
如果我可以问,您的意思是管理员不能访问编辑器吗?
-
@Namoshek 不,先生,这不是重复的,请注意我的问题和答案并与该问题和答案进行比较
-
显然是,请参阅参考答案。那里的解决方案可以处理多个角色。
-
我的问题通过@BharatGeleda 解决方案解决了你告诉的链接,它有 getRole() 我不知道那是什么,我该如何定义它!但在这个答案上,在堆栈和谷歌上搜索数小时后,很清楚并解决了我的问题
标签: laravel authentication roles user-roles laravel-authentication