Подтвердить что ты не робот

Как реализовать шлюз 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? Я прочитал поддерживающие документы, которые враждебно относятся к функциям, но я просто не уверен, как установить данные, чтобы заставить функции работать.

4b9b3361

Ответ 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";
}