1

Cartalyst Sentinel と ACL のこの概念は初めてです。ユーザーを作成し、アクティベーションとログインとログアウトを実行できました。

学びを次のレベルに引き上げたいと思います。このlaravelアプリには2種類のユーザーが欲しいです。1 つは管理者で、もう 1 つはサブスクライバーです。私のアカウント作成方法は、デフォルトでユーザーをサブスクライバーに作成する必要があると想定しています。

public function postCreate() {

        /* Validation */
        $validation = Validator::make(Input::all(), [
            'email' => 'required|email|max:50|unique:users',
            'username' => 'required|min:3|max:20|unique:users',
            'password' => 'required|min:6',
            'password_repeat' => 'required|same:password',
        ]);

        if ($validation->fails()) {

            return Redirect('login')->withErrors($validation)->withInput();

        } else {

            $credentials = Input::all();
            $user = Sentinel::register($credentials);

            $activation = Activation::create($user);

            $activation_code = $activation->code;

            if ($user) {

                Mail::send('emails.auth.activate', ['link' => URL::route('account-activate', [$user->id, $activation_code]), 'username' => $user->username], function($message) use ($user) {

                    $message->to($user->email, $user->username)->subject('Activate your account');

                });

                return Redirect::route('home')->with('global', 'Thank you for registering! We have sent you an email to activate your account');

            }

        }       

    }

そのようにコードを変更しますか

$user = Sentinel::register($credentials);

$user = Sentinel::findById(1);

$role = Sentinel::findRoleByName('Subscribers');

$role->users()->attach($user);

問題は、そもそもロールを作成していないことです。その機能をどこに書きますか?現在、私は次のコントローラーを持っています

  1. AccountController - アクティベーションを処理します
  2. AuthController - ログイン/ログアウトを処理します
  3. RegistrationController - ユーザーの登録を処理します
  4. RolesController - ここにはまだ何も書いていません。私は少し迷っています。

私を案内してください。どんな助けでも大歓迎です。

4

1 に答える 1

5

ユーザーをすでに登録している場合は、ユーザーを検索する必要はありません。登録メソッドはユーザーを返します。次の操作を実行して、ロールをユーザーに関連付けることができます。

$user = Sentinel::register($credentials);
$role = Sentinel::findRoleByName('Subscribers');
$role->users()->attach($user);
// OR
$user->roles()->attach($role); 

ユーザー オブジェクトとロール オブジェクトの両方があり、多対多の関係があるため、どちらを使用してもかまいません。

アクセス許可を作成するには、db シーダーまたはメソッドを作成する必要があります。ただし、Subscribers Role を作成するには、次のことを行う必要があります。

Sentinel::getRoleRepository()->createModel()->create([
    'name' => 'Subscribers',
    'slug' => 'subscribers',
    'permissions' => [
       'user.view'   => true,
       'user.delete' => false,
       // any other permissions you want your Subscribers to have
    ]
]);

同様の呼び出しで、管理者の役割も構築できます。

Roles Model と Controller は既に構築されています。必要なのは、既にSentinel::findRoleByName('Subscribers');呼び出している Sentinel を介してそれらにアクセスすることだけです。

Cartalyst には、ユーザーの役割と権限の設定に関するかなり適切なドキュメントがあります。

それぞれの役割に何をしてほしいか、何をしてほしくないかを決めるだけです。また、ユーザーごとに特定の権限を設定して、役割の権限を上書きすることもできます。

于 2014-11-06T17:30:01.923 に答える