24

Laravel 4 で構築されたサイトで cartalyst sentry 2 を使用しようとしています。基本的に、アクセス許可を実装する方法がわかりません。

グループのアクセス許可について私が見た例では、例として次のように指定しています。

{
    "name" : "Administrator",
    "permissions" : 
    {
        "user.create" : 1,
        "user.delete" : 1,
        "user.view"   : 1,
        "user.update" : 1
    }
}

SO これは、管理者グループの権限を設定しています。しかし、これらのアクセス許可はどこに設定されていますか?

テーブル 'グループ' には、テキスト フィールドである権限と呼ばれるフィールドがあります。それとも、これらはモデルまたはコントローラーに設定されていますか?

laravel 4アプリでの使用方法を段階的に教えてもらえますか? 関数に敵対するサポートドキュメントを読みましたが、関数を機能させるためにデータを設定する方法がわかりません。

4

2 に答える 2

52

基本的にあなたがしなければならない..

グループを作成する

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
}

ユーザーがスーパー管理者であるかどうかを確認します (このグループのみが「システム」アクセス権を持っています)

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.';
}
于 2013-06-09T18:15:24.127 に答える
4

テーブルでは、groupsJSON を使用してアクセス許可を設定します。

次の列があります。

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";
}
于 2013-06-09T18:08:30.843 に答える