我有一种检查用户角色是否为管理员的方法,如果不是,请使用重定向他们return redirect('/')->send();
。如何检查用户角色并重定向用户,而不显示页面并等待重定向?
我的控制器:
class AdminController extends Controller
{
public function __construct()
{
if (Auth::check())
{
$user = Auth::user();
if ($user->role != 'admin')
{
return redirect('/')->send();
}
}
else
{
return redirect('/')->send();
}
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return View('admin/index');
}
}
创建自己的中间件。这是一个例子。在我的示例中,我在一个单独的模型中有几个用户组。您必须根据需要更改代码。
通过终端/控制台创建中间件:
php artisan make:middleware UserGroupMiddleware
可以在以下位置找到创建的中间件类 app/Http/Middleware/UserGroupMiddleware.php
您的中间件中需要以下代码:
namespace App\Http\Middleware;
use Closure;
use App\User;
use App\Usergroup;
class UserGroupMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $group)
{
if($request->user() !== NULL){
$userGroupId = $request->user()->group;
$userGroup = Usergroup::find($userGroupId);
if($userGroup->slug === $group){
return $next($request);
}
}
// Redirect the user to the loginpage
return redirect('/login');
}
}
现在您必须在以下位置注册该中间件app/Http/Kernel.php
:
protected $routeMiddleware = [
// other middlewares
// Custom Middleware
'group' => \App\Http\Middleware\UserGroupMiddleware::class
];
最后,您需要将中间件连接到您的路由:
Route::group(['middleware' => 'group:admin'], function(){
// Routes for admins, e.g.
Route::get('/dashboard', 'SomeController@dashboard');
});
// Or for a single route:
Route::get('/dashboard', ['middleware' => 'group:admin'], function(){
return view('adminbereich.dashboard');
});
请记住,您可以通过以下方式传递多个中间件:
Route::get('/some/route', ['middleware' => ['group:admin', 'auth']], 'SomeController@methodXYZ');