我想知道如何将角色作为数组传递,因为当我尝试在我的控制器构造中执行此操作时,它似乎只是管理员。
以下是我的app/controllers/UserscController.php
class UsersController extends BaseController {
public function __construct()
{
parent::__construct();
$this->beforeFilter('role:Administrator,Owner');
}
}
以下是我的app/filters.php
Route::filter('role', function($route, $request, $roles)
{
if(Auth::guest() !== true)
{
if(!empty($roles))
{
$roles = explode(',', $roles);
if(count($roles) > 0)
{
foreach($roles as $role)
{
if (Auth::user()->role->role_name == $role)
{
return;
}
}
}
}
return Redirect::to('/youshallnotpass');
}
});
答案 0 :(得分:2)
您可以将角色设置为控制器中的参数。要将角色加载到过滤器中,您可以执行以下操作:
Route::filter('role', function($route, $request)
{
if(Auth::guest() !== true)
{
$roles = $route->parameter('roles');
if(!empty($roles))
{
foreach($roles as $role)
{
if (Auth::user()->role->role_name == $role)
{
return;
}
}
}
return Redirect::to('/youshallnotpass');
}
});
注意:强>
在laraval 4.1之前,您将使用:$roles = $route->getParameter('roles');
代替$roles = $route->parameter('roles');
希望这有帮助!
答案 1 :(得分:1)
Laravel已经在逗号上展开了您的过滤器参数,以允许将多个参数传递给过滤器。因此,在您的情况下,您实际上已经将两个参数传递给过滤器:第一个参数的值为“Administrator”,第二个参数的值为“Owner”。
所以,有两个快速选择:
更改字符串中使用的分隔符。在您的控制器中:$this->beforeFilter('role:Administrator;Owner');
,然后在您的过滤器中:$roles = explode(';', $roles);
或者,保留控制器代码,并在过滤器中使用PHP的func_get_args()
函数:
Route::filter('role', function($route, $request)
{
if(Auth::guest() !== true)
{
$roles = array_slice(func_get_args(), 2);
foreach($roles as $role)
{
if (Auth::user()->role->role_name == $role)
{
return;
}
}
return Redirect::to('/youshallnotpass');
}
});