Php 用于多个角色的Laravel 5.2控制器中间件
在我的laravel应用程序中,我有一个角色管理员、版主和成员。应用程序有前端和后端部分。我想只允许管理员和版主访问后端部分。我创建SuperUsersMiddle软件:Php 用于多个角色的Laravel 5.2控制器中间件,php,laravel-5.2,roles,middleware,Php,Laravel 5.2,Roles,Middleware,在我的laravel应用程序中,我有一个角色管理员、版主和成员。应用程序有前端和后端部分。我想只允许管理员和版主访问后端部分。我创建SuperUsersMiddle软件: <?php namespace CMS\Http\Middleware; use Closure; class SuperUsersMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Ht
<?php
namespace CMS\Http\Middleware;
use Closure;
class SuperUsersMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! $request->user()->hasRole('administrator') || ! $request->user()->hasRole('moderator')) {
return redirect('/');
}
return $next($request);
}
}
...
public function __construct()
{
$this->middleware('superusers');
}
...
在我的后端文件夹中,我创建Controller.php(后端部分中的所有其他控制器都扩展了此控制器)和_construct()函数集中间件:
<?php
namespace CMS\Http\Middleware;
use Closure;
class SuperUsersMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! $request->user()->hasRole('administrator') || ! $request->user()->hasRole('moderator')) {
return redirect('/');
}
return $next($request);
}
}
...
public function __construct()
{
$this->middleware('superusers');
}
...
但这对我不起作用。我还创建了管理员和版主中间件,它可以单独工作,但我需要两者同时工作。怎么做?I托盘:
public function __construct()
{
$this->middleware('administrator');
$this->middleware('moderator');
}
但这也不行。对于这种情况,什么是最佳实践?首先,我不会在您的主
控制器上应用任何中间件,因为这样中间件将应用于所有事情。您应该在每个单独的控制器上执行此操作,如UserController
您可以将任意多个中间件实例应用于路由/函数。我不知道这方面有什么限制。所以我不知道你为什么说这不管用:
public function __construct()
{
$this->middleware('administrator');
$this->middleware('moderator');
}
您可以将不同的中间件应用于需要不同级别的路由。您可以在routes.php
或控制器中执行此操作。如果您想在控制器中像上面所做的那样执行此操作,您可以使用以下内容:
public function __construct()
{
$this->middleware('auth'); //this applies to all actions
$this->middleware('administrator', ['only' => ['adminFunction', 'otherAdminFunction','bothCanAccess']]);
$this->middleware('moderator',['only' => ['moderatorFunction','bothCanAccess']);
}
public function adminfunction()
{
...
}
public function otherAdminfunction()
{
...
}
public function moderatorFunction()
{
...
}
public function bothCanAccess()
{
...
}
Route::get('/admin', ['middleware' => ['auth', 'administrator'],'uses'=>'Controller@adminFunction']);
因此,首先,auth
中间件将应用于所有操作。这意味着用户必须登录才能访问此处的任何功能。然后,您可以将特定的中间件应用于每个函数。如果您需要此方面的更多信息,请查看文档:
要在路由器中执行此操作,请执行以下操作:
public function __construct()
{
$this->middleware('auth'); //this applies to all actions
$this->middleware('administrator', ['only' => ['adminFunction', 'otherAdminFunction','bothCanAccess']]);
$this->middleware('moderator',['only' => ['moderatorFunction','bothCanAccess']);
}
public function adminfunction()
{
...
}
public function otherAdminfunction()
{
...
}
public function moderatorFunction()
{
...
}
public function bothCanAccess()
{
...
}
Route::get('/admin', ['middleware' => ['auth', 'administrator'],'uses'=>'Controller@adminFunction']);
因此,在这种情况下,它将首先应用auth
中间件以确保有人登录,然后启动administrator
中间件并确保用户是管理员
希望这能有所帮助