我有一个关于过滤控制器及其针对多个用户角色的操作的问题。可以说我有一个名为MyController的控制器:
public class MyController extends \BaseController
{
public static function index()
{
}
public static function show()
{
}
public static function create()
{
}
public static function store()
{
}
public static function other()
{
}
}
我为每个角色都有2个过滤器,分别命名为admin和staff:
Route::filter('admin', function()
{
// Lines of code to get role
if($role != 'admin') return View::make('errors.401');
});
Route::filter('staff', function()
{
// Lines of code to get role
if($role != 'staff') return View::make('errors.401');
});
然后,我试图在MyController的构造函数上使用beforeFilter:
public function __construct()
{
$this->beforeFilter('admin', ['only' => ['index', 'show', 'create', 'store']]);
$this->beforeFilter('staff', ['only' => ['index', 'show']]);
}
当我添加第一个beforeFilter时,它可以按预期的方式工作(当我以工作人员身份登录到我的应用程序时,我无法访问索引,显示,创建和存储方法)。但是,当我添加第二个过滤器并再次以工作人员身份登录时,我无法访问索引并显示操作,我希望工作人员可以访问该索引。
我的问题是,是否可以在控制器的构造函数中为多个角色定义过滤器?(在这种情况下,我想使操作索引并显示管理员和工作人员可以访问,但仅创建和存储管理员可以访问的内容),如果可以的话,我该如何实现?
谢谢。
我假设您拥有Admin可以访问所有功能,而工作人员可以访问除“ show”以外的所有内容
这是控制器
class MyController extends \BaseController
{
public function __construct(){
$this->beforeFilter('admin', ['only' => ['show']]);
}
public function index()
{
echo "index";
}
public function show()
{
echo "show";
}
}
在上一篇文章中看到,您正在使用公共类,我相信在PHP中您只需要类,在函数中最好不要使用静态类。
这是filters.php
Route::filter('admin', function()
{
// Lines of code to get role
if($role != 'admin') return "This is only for admin";
});
在routes.php中
Route::get("/my", "MyController@index");
Route::get("/show", "MyController@show");
然后尝试以管理员身份登录,您将可以访问“索引”和“显示”。然后尝试以工作人员身份登录,您将可以访问“索引”,但不能访问“显示”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句