如果isadmin
是true
的话,您能帮我怎么创建吗?它将重定向到管理页面,否则重定向到主页。
AuthController
public function postLogin(Request $request){
if(!auth()->attempt(['email' => $request->email, 'password' => $request->password])){
return redirect()->back();
}
return redirect()->route('home');
}
主要原因可能是因为
return redirect()->route('home');
尝试更改为('admin')时成功重定向。
当我尝试添加时
protected function authenticated(\Illuminate\Http\Request $request, $user)
{
if( $user->isadmin){
return redirect('admin');
}
return redirect('home');
}
它也不起作用
答案 0 :(得分:2)
我针对这种情况的方法是使用@sssurii告诉您的中间件
我有一个角色表,其中列出了普通用户和admin用户,此外,我还具有以下中间件:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Response;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$user = Auth::user();
if(!$user->role->title==='Admin'){
return route('user');
}
return $next($request);
}
}
然后在内核类中,我在路由中添加了该中间件
protected $routeMiddleware = [
....
'isAdmin' => \App\Http\Middleware\AdminMiddleware::class
];
现在您需要保护自己的管理路线,它可以通过
来解决 Route::group(['middleware' => ['auth', 'isAdmin'],
'prefix' => 'admin', 'as' => 'admin.'], function () {
Route::get('/home', 'Admin\HomeController@index')->name('dashboard');
.....
}
在这里,您可以过滤对管理路由的请求,并仅允许进入属于组/角色Admin的用户。
之后,如果要在登录时进行自动重定向,则应该在Auth控制器中修改redirectPath函数(通常在app/http/controllers/auth/AuthController.php
上)
public function redirectPath()
{
if (\Auth::user()->role->title === 'Admin') {
return redirect()->route('admin.dashboard');
}
return redirect()->route('user.dashboard');
}
答案 1 :(得分:1)
我建议创建一个中间件并使用它来保护路由
例如,您可以创建一个管理员中间件
php artisan make:middleware Admin
在App \ Http \ Middleware \ Admin.php中
use Auth;
use Session;
use Closure;
public function handle($request, Closure $next)
{
// Check if user has permission to access route
if(!Auth::user()->admin) {
Session::flash('info', 'You do not have permission to perform this operation!');
return redirect()->back();
}
return $next($request);
}
然后在受保护的路线中(假设只有您的管理员可以查看此路线中的所有帖子),
Route::post('admin/post/index', 'PostController@index')->middleware('auth');
或者在控制器中
public function __construct()
{
$this->middleware('auth');
}
使用except
排除路由,或使用only
包括方法。
在kernel.php中
protected $routeMiddleware = [
...
'admin' => \App\Http\Middleware\Admin::class
];