Мне нужно использовать 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
Проверка разрешений осуществляется через 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');
});
Других решений пока нет …