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

Мне нужно использовать Sentry 2.1 в приложении Laravel, я прочитал этот документ
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

0

Решение

Проверка разрешений осуществляется через 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');
});
1

Другие решения

Других решений пока нет …