Как реализовать шлюз 2 разрешения с Laravel 4?
Я пытаюсь использовать cartalyst sentry 2 на моем сайте, который строится с Laravel 4. В принципе я не понимаю, как реализовать разрешения.
В примерах, которые я видел для разрешений для группы, укажите в качестве примера следующие примеры:
{
"name" : "Administrator",
"permissions" :
{
"user.create" : 1,
"user.delete" : 1,
"user.view" : 1,
"user.update" : 1
}
}
SO, это устанавливает разрешения для группы admin. НО, где эти разрешения установлены?
В "группах групп" есть поле, называемое разрешениями, которое является текстовым полем - они установлены там - если да, то как? Или они установлены в модели или контроллере?
Может ли кто-нибудь указать мне шаг за шагом о том, как использовать приложение laravel 4? Я прочитал поддерживающие документы, которые враждебно относятся к функциям, но я просто не уверен, как установить данные, чтобы заставить функции работать.
Ответы
Ответ 1
В основном вам нужно...
Создайте свои группы
Sentry::getGroupProvider()->create([
'name' => 'Super Administrators',
'permissions' => [
'system' => 1,
],
]);
Sentry::getGroupProvider()->create([
'name' => 'Managers',
'permissions' => [
'system.products' => 1,
'system.store' => 1,
'system.profile' => 1,
],
]);
Установите группу для определенного пользователя, в этом случае он устанавливает Менеджеров для текущего зарегистрированного пользователя
Sentry::getUser()->addGroup( Sentry::getGroupProvider()->findByName('Managers') );
Проверьте, имеет ли пользователь определенный доступ
if ( Sentry::getUser()->hasAnyAccess(['system','system.products']) )
{
// Will be able to do a thing
}
Проверьте, является ли пользователь Super Administrator (только у этой группы есть доступ к системе)
if ( Sentry::getUser()->hasAnyAccess(['system']) )
{
// Will be able to do a thing
}
Получить все группы от определенного пользователя
try
{
// Find the user using the user id
$user = Sentry::getUserProvider()->findById(1);
// Get the user groups
$groups = $user->getGroups();
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
echo 'User was not found.';
}
Ответ 2
В вашей таблице groups
вы устанавливаете разрешения с помощью JSON.
У меня есть следующие столбцы:
id | name | permissions
И строка:
1 | admin | {"admin":1, "create_news": 1}
Назначьте пользователя группе, используя таблицу users_groups
Теперь вы можете использовать следующий пример, чтобы проверить, имеет ли пользователь заданное разрешение:
$user = Sentry::getUser();
if ($user->hasAccess('create_news')) {
echo "You can create a news item";
}
else {
echo "You can't create a news item";
}