具有多个角色限制的方法之前

时间:2014-11-01 20:36:46

标签: laravel laravel-4

我很想知道是否可以阻止没有拥有者或管理员角色的用户访问laravel应用程序中的某些控制器?

2 个答案:

答案 0 :(得分:1)

是的,你可以。您可以使用路由过滤器执行此操作。

routes.php文件

Route::group(['prefix' => 'admin', 'before' => 'auth.admin'), function()
  {

    // Your routes    

  }
]);

并在filters.php中

Route::filter('auth.admin', function()
{
  // logic to set $isAdmin to true or false      

  if(!$isAdmin)
  {
    return Redirect::to('login')->with('flash_message', 'Please Login with your admin credentials');
  }
});

答案 1 :(得分:1)

路由过滤器已经提出,但由于您的过滤器应该控制器特定,因此您可能需要尝试controller filters

首先,让我们添加你的控制器

public function __construct()
{
    $this->beforeFilter(function()
    {
         // check permissions
    });
}

在执行控制器操作之前调用此函数。

在那里取决于你想做什么。我现在只是猜测,因为我不知道你的确切架构,但我想你想做这样的事情:

$user = Auth::user();
$role = $user->role->identifier;

if($role !== 'admin' && $role !== 'other-role-that-has-access'){
    App::abort(401); // Throw an unauthorized error
}

您可以进行重定向,渲染视图或基本上执行任何操作,而不是抛出错误。只做一些阻止进一步执行的事情,这样你的控制器动作就不会被调用。

修改

您可以使用预定义的过滤器(来自routes.php或filters.php),而不是使用Closure功能。

$this->beforeFilter('filter-name', array('only' => array('fooAction', 'barAction')));

有关详细信息,请查看documentation