【发布时间】:2016-06-06 10:37:22
【问题描述】:
我的项目有 2 个登录页面
1) cms/admin/login
2) cms/用户/登录
如果用户到用户登录页面,如何重定向 cms/用户/登录
如果管理员调用 cms/admin/重定向到cms/admin/登录页面
【问题讨论】:
我的项目有 2 个登录页面
1) cms/admin/login
2) cms/用户/登录
如果用户到用户登录页面,如何重定向 cms/用户/登录
如果管理员调用 cms/admin/重定向到cms/admin/登录页面
【问题讨论】:
首先,在用户登录您的应用程序之前,您不知道用户是用户还是管理员,因此为同一事物设置 2 条不同的路线有点糟糕。要实现与您想要的类似的东西,您需要有一个cms/login 路由,用户/管理员将登录并根据他的状态(例如1 - 用户,2 - 管理员)将他重定向到cms/user/page 或cms/admin/page .为此,您必须使用 Middleware,这在 Laravel 官方文档中有很好的记录。
例如,所有管理页面的中间件应如下所示
<?php
namespace App\Http\Middleware;
use Closure;
class AdminMiddleware
{
/**
* Run the request filter.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->input('status') == 2) {
//2 means its admin and i let him get that admin page
return $next($request);
}
//he is not admin so i redirect him back
return Redirect::back();
}
}
在Kernel.php 中添加中间件别名
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\AdminMiddleware::class,
];
在routes.php 中,您将中间件分配给该路由
Route::get('/cms/admin/page', ['middleware' => 'admin', 'uses'=>'Controller@method']);
希望对你有帮助
【讨论】:
Gates。请参阅文档:laravel.com/docs/5.8/authorization