Как использовать разрешения в Sentry для приложения Laravel

Мне нужно использовать Sentry 2.1 в приложении Laravel, я прочитал этот документ https://cartalyst.com/manual/sentry/2.1 мне действительно нужно иметь несколько групп и назначать некоторые разрешения для каждой группы, а затем назначать эти группы пользователям.

возьмем это как пример (который я взял по той же ссылке): я регистрирую пользователя со следующими данными

 Sentry::register(array(
   'email'    => '[email protected]',
   '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.


person Siavosh    schedule 25.01.2015    source источник


Ответы (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');
});
person patricus    schedule 25.01.2015