6

私は周りを見回して、orとを使用したLaravel 4 認証に関するいくつかのチュートリアルを見つけました。私は初心者で、これが私の最初のフレームワークです。SentryConfideEntrustLaravel

ユーザーロールを使用したユーザー認証を実装するチュートリアルまたは提案を知っている人はいますか?

これが私が作ろうとしているものです。- 仕事用の社内ウェブサイトです。ライターがサインインして記事を送信できる場所。- 管理者はそれらの記事を参照できます。- これらの記事は公開されていないため、誰も閲覧できません。- ライターはお互いの記事を見ることはできませんが、管理者はすべてにアクセスできます。

ユーザーの役割とその実装方法に関するチュートリアルを探しています。

編集

これが私がやったことです。

@Antonio Carlos Ribeiroで指定された方法で Sentry をインストールした後。

UsersGroups、および他のいくつかのテーブルがありました(ユーザーとグループを使用する必要がありました)。

ユーザーとグループの作成に最初に使用したシーダーは次のとおりです。より効率的にすることもできますが、始めたいだけの人にとってはこれでうまくいくでしょう。

class SentrySeeder extends Seeder {

public function run()
{
    DB::table('users')->delete();
    DB::table('groups')->delete();
    DB::table('users_groups')->delete();

    Sentry::getUserProvider()->create(array(
        'email'       => 'admin@admin.com',
        'password'    => "admin",
        'first_name'  => 'John',
        'last_name'   => 'McClane',
        'activated'   => 1,
    ));

    Sentry::getUserProvider()->create(array(
        'email'       => 'user@user.com',
        'password'    => "user",
        'first_name'  => 'Saad',
        'last_name'   => 'Kabir',
        'activated'   => 1,
    ));

    Sentry::getUserProvider()->create(array(
        'email'       => 'jack@user.com',
        'password'    => "user",
        'first_name'  => 'Jack',
        'last_name'   => 'Doe',
        'activated'   => 1,
    ));

    Sentry::getUserProvider()->create(array(
        'email'       => 'jon@user.com',
        'password'    => "user",
        'first_name'  => 'Jon',
        'last_name'   => 'Doe',
        'activated'   => 1,
    ));

    Sentry::getGroupProvider()->create(array(
        'name'        => 'Admin',
        'permissions' => array('admin' => 1),
    ));

    Sentry::getGroupProvider()->create(array(
        'name'        => 'Writer',
        'permissions' => array('writer' => 1),
    ));



    // Assign user permissions
    $adminUser  = Sentry::getUserProvider()->findByLogin('admin@admin.com');
    $adminGroup = Sentry::getGroupProvider()->findByName('Admin');
    $adminUser->addGroup($adminGroup);


    $userUser  = Sentry::getUserProvider()->findByLogin('user@user.com');
    $userGroup = Sentry::getGroupProvider()->findByName('Writer');
    $userUser->addGroup($userGroup);

    $userUser  = Sentry::getUserProvider()->findByLogin('jack@user.com');
    $userGroup = Sentry::getGroupProvider()->findByName('Writer');
    $userUser->addGroup($userGroup);

    $userUser  = Sentry::getUserProvider()->findByLogin('jon@user.com');
    $userGroup = Sentry::getGroupProvider()->findByName('Writer');
    $userUser->addGroup($userGroup);
}

}

最初のユーザーを追加した後、フォームを使用して新しいユーザーを追加していたので、コントローラーには次のようなものがありました。繰り返しますが、これはフレームワークを学習/テストするためのものであり、元の実装は非常に異なります。ただし、テスト目的では、これは機能するはずです。

controller@function に送信するフォームがあると仮定すると、次のようなものを持つことができます。

$user = Sentry::getUserProvider()->create(array(
            'email'       => Input::get('email'),
            'password'    => Input::get('password'),
            'first_name'  => Input::get('first_name'),
            'last_name'   => Input::get('last_name'),
            'activated'   => 1,
        ));

        $writerGroup = Sentry::getGroupProvider()->findByName('writer');

        $user->addGroup($writerGroup);

Sentry のドキュメントで見つけることができる残りの部分: Sentry Docs

この質問を自由に編集して、より有益なものにしたり、新しい例を追加したりしてください。

4

1 に答える 1

13

これは正確にはそれに関する記事ではありませんが、Sentry2 の認証とロールで使用するもののほとんどをカバーしています。したがって、基本的には

実行してcomposerをインストールします

curl -sS https://getcomposer.org/installer | php

実行可能フォルダーに配置し、名前を変更します

sudo mv composer.phar /bin/composer

実行可能ビットを設定する

sudo chmod +x /bin/composer

実行してlaravelをインストール

composer create-project laravel/laravel

セントリー 2 をインストールする

composer require cartalyst/sentry:2.0.*

次に、Sentry を使用するだけです。

ユーザー グループと各グループの権限を作成します。

Sentry::getGroupProvider()->create(array(
    'name'        => 'Super Administrators',
    'permissions' => array(
            'system' => 1,
    ),
));

Sentry::getGroupProvider()->create(array(
    'name'        => 'Managers',
    'permissions' => array(
        'system.articles' => 1,
    ),
));

Sentry::getGroupProvider()->create(array(
    'name'        => 'Publishers',
    'permissions' => array(
        'system.articles.add' => 1,
        'system.articles.edit' => 1,
        'system.articles.delete' => 1,
        'system.articles.publish' => 1,
    ),
));

Sentry::getGroupProvider()->create(array(
    'name'        => 'Authors',
    'permissions' => array(
        'system.articles.add' => 1,
        'system.articles.edit' => 1,
        'system.articles.delete' => 1,
    ),
));

グループを特定のユーザーに設定します。この場合、マネージャーを現在ログインしているユーザーに設定します

Sentry::getUser()->addGroup( Sentry::getGroupProvider()->findByName('Author') );

ユーザーが投稿できるかどうかの確認と記事の追加

if ( Sentry::getUser()->hasAnyAccess(['system','system.articles','system.articles.publish']) )
{
    // will be able to publish something
}

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

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-19T20:00:44.697 に答える