MD *_*fat 5 middleware laravel laravel-5 laravel-5.4
我想__construct在我的控制器中使用方法中的两个中间件.我最近几个小时在谷歌搜索,但没有找到任何有用的资源.
这是我__construct的中间件:
public function __construct()
{
$this->middleware('adminuser');
$this->middleware('generaluser')->only('quizDetails','validateQuiz','attemptQuiz','submitQuiz','saveAnswer','setIndividualTime');
}
Run Code Online (Sandbox Code Playgroud)
我想为普通用户提供访问那些generaluser中间件方法.我是怎么做到的?
请帮我解决这个问题.
谢谢
因此,您需要为您的中间件使用类似"OR"的东西并且它不存在.相反,您可以使用中间件参数并在中间件中进行魔术.
创建一个中间件来检查所有角色,而不是每个角色都有一个中间件.
use Closure;
class CheckRole
{
public function handle($request, Closure $next, $role)
{
$roles = array_except(func_get_args(), [0,1]) // get array of your roles.
// $request->user()->role IS AN EXAMPlE
if (! in_array($request->user()->role, $roles)) {
// Redirect...
}
return $next($request);
}
Run Code Online (Sandbox Code Playgroud)
接下来是在kernel.php,routeMiddleware数组中注册它:
'role' => \App\Http\Middleware\CheckRole::class,
Run Code Online (Sandbox Code Playgroud)
然后,您可以同时检查多个角色
$this->middleware('role:adminuser')->only('functionA', 'functionB');
$this->middleware('role:adminuser,guestuser')->only('functionC', 'functionD');
Run Code Online (Sandbox Code Playgroud)
注意:这是一个示例,您可以根据需要更改中间件中的逻辑.
在路由文件中而不是在构造内部使用中间件
Route::middleware(['adminuser'])->group(function () {
//Only admins can access this
Route::get('/','Controller@method');
Route::get('/admins','Controller@method');
});
Route::middleware(['generaluser'])->group(function () {
// General users access this
Route::get('/users', 'Controller@method');
Route::get('/generalusers', 'Controller@method');
});
Run Code Online (Sandbox Code Playgroud)
如果你想同时使用两个中间件
Route::middleware(['firstMiddleWare','secondMiddleWare'])->group(function () {
Route::get('/aroute', 'Controller@method');
});
Run Code Online (Sandbox Code Playgroud)
不属于某个组的路由将可供所有用户使用
| 归档时间: |
|
| 查看次数: |
3302 次 |
| 最近记录: |