如何在Sentry中使用Laravel应用程序的权限

时间:2015-01-25 13:49:52

标签: php laravel authentication laravel-4 cartalyst-sentry

我需要在Laravel应用程序中使用Sentry 2.1,我读了这篇文章 https://cartalyst.com/manual/sentry/2.1 我真正需要的是一些组,并为每个组分配一些权限,然后将这些组分配给用户。

以此为例(我从同一个链接获取): 我为用户注册了以下详细信息

 Sentry::register(array(
   'email'    => 'john.doe@example.com',
   'password' => 'foobar', 
   'activated' => true,    
));

然后我注册一个包含以下详细信息的小组:

 $group = Sentry::createGroup(array(
    'name'        => 'Moderator',
    'permissions' => array(
        'admin' => 1,
        'writers' => 1,
    ),
));

然后我将该组分配给用户

问题: 有人可以向我提供一段代码,帮助我了解如何修改routes.php并为其添加过滤器,以便过滤器适用于权限而非群组。

Route::group(array('before' => 'admin'), function()
{
    Route::controller('admin','adminController');

});

Route::group(array('before' => 'mod'), function()
{
     Route::controller('cruds','crudController');
 });

例如,具有admin权限的用户只能看到adminController链接

1 个答案:

答案 0 :(得分:1)

通过Sentry hasAccess()方法检查权限。您可以创建多个筛选器以针对不同的权限检查执行特定操作,也可以使用将权限作为参数并检查该筛选的通用筛选器。下面是一个通用的“hasAccess”过滤器,您可以向其传递要检查的权限。

过滤器:

Route::filter('hasAccess', function ($route, $request, $value) {
    try {
        // get the logged in user
        $user = Sentry::getUser();

        // check the user against the requested permission
        if (!$user->hasAccess($value)) {
            // action to take if the user doesn't have permission
            return Redirect::home();
        }
    } catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
        // action to take if the user is not logged in
        return Redirect::guest(route('login'));
    }
});

路线:

Route::group(array('before' => 'hasAccess:admin'), function() {
    Route::controller('admin','adminController');
});

Route::group(array('before' => 'hasAccess:mod'), function() {
    Route::controller('cruds','crudController');
});