FuelPHPでSentry。その2

スポンサーリンク

今回はユーザの作成方法を書いていきます。大体は公式のgithubにあるマニュアルを見れば大体は把握できるのでまぁまとめなくても・・・って少し思ってたりする。

一応、こちらの記事と前回作った記事はFuelPHP勉強会 東京 vol.3である程度まとめた形で発表予定です。5分だから・・・ざっくりして、短くなりそう。

ユーザを作成する

Exception一覧

・Cartalyst\Sentry\Users\LoginRequiredException
ログインフィールド(通常はEmail)が抜けている場合に投げられるExcepion
Sentryのconfig/sentry.phpの’login_attribute’で対象カラムを変更可能

・Cartalyst\Sentry\Users\PasswordRequiredException
パスワードフィールドが抜けている場合に投げられるException

・Cartalyst\Sentry\Users\UserExistsException
ログインフィールドが既に存在した時に投げられるException

・Cartalyst\Sentry\Groups\GroupNotFoundException
グループがない場合に投げられるException

例(殆どGithubと同様ですが、日本語化してます。)

try
{
    // ユーザを作成する
    $user = Sentry::getUserProvider()->create(array(
        'email'    => '[email protected]',
        'password' => 'test',
    ));

    // グループの情報を取得
    $adminGroup = Sentry::getGroupProvider()->findById(1);

    // ユーザをグループに追加する
    $user->addGroup($adminGroup);
}
catch (Cartalyst\Sentry\Users\LoginRequiredException $e)
{
    echo 'メールアドレス項目は必須です。';
}
catch (Cartalyst\Sentry\Users\PasswordRequiredException $e)
{
    echo 'パスワード項目は必須です。';
}
catch (Cartalyst\Sentry\Users\UserExistsException $e)
{
    echo 'すでにそのメールアドレスは登録済みです。';
}
catch (Cartalyst\Sentry\Groups\GroupNotFoundException $e)
{
    echo 'グループがありません。';
}

パーミッションを設定する方法

パーミッションはユーザを作成する時と、別でセットをすることも可能。

// ユーザを作成する
$user = Sentry::getUserProvider()->create(array(
    'email'       => '[email protected]',
    'password'    => 'test',
    'permissions' => array(
        'user.create' => -1,    // ユーザを作成出来るか
        'user.delete' => -1,    // ユーザを削除出来るか
        'user.view'   => 1,     // ユーザを閲覧出来るか
        'user.update' => 1,     // ユーザを更新出来るか
    ),
));

Usersクラスの場合にはパーミッションの値に3つの値が存在します。

-1:拒否
 1:許可
 0:継承

継承はグループを継承するのだと思われます。

補足

パーミッションは複数作ることが可能です。自分で名前を決めても問題ありません。(多分)パーミッションを確認するためには、hasAccessメソッドを使用することで判定ができます。

try
{
    // ユーザを取得する
    $user = Sentry::getUserProvider()->findById(1);

    // そのユーザがadminパーミッションに対応しているかどうか(アクセス出来るかどうか)を判定
    // 複数のパーミッションを指定する際には、配列で指定
    if ($user->hasAccess('admin'))
    {
        // そのユーザがアクセスが出来る時の処理
    }
    else
    {
        // そのユーザがアクセス出来ない時の処理
    }
}
catch (Cartalyst\Sentry\UserNotFoundException $e)
{
    echo 'そのユーザは存在しません。';
}

ユーザを作成して、認証を行う

Sentryでは、ユーザの認証を行うことが可能です。例えばユーザを作成→メールが送信される→メールに載ってある文字列を貼って認証という形が簡単に作ることが出来ます。

Exception一覧

・Cartalyst\Sentry\Users\LoginRequiredException
ログインフィールド(通常はEmail)が抜けている場合に投げられるExcepion
Sentryのconfig/sentry.phpの’login_attribute’で対象カラムを変更可能

・Cartalyst\Sentry\Users\UserExistsException
ログインフィールドが既に存在した時に投げられるException

例(登録時)

try
{
    // ユーザを登録する
    $user = Sentry::register(array(
        'email'    => '[email protected]',
        'password' => 'test',
    ));

    // 認証用のコードを取得
    $activationCode = $user->getActivationCode();

    // 対象のユーザにアクティベーションコードを送信する
}
catch (Cartalyst\Sentry\Users\LoginRequiredException $e)
{
    echo 'Login field is required.';
}
catch (Cartalyst\Sentry\Users\UserExistsException $e)
{
    echo 'User with this login already exists.';
}

例(アクティベーション時)

try
{
    // ユーザを取得
    $user = Sentry::getUserProvider()->findById(1);

    // アクティベーションを判定
    if ($user->attemptActivation('8f1Z7wA4uVt7VemBpGSfaoI9mcjdEwtK8elCnQOb'))
    {
        // アクティベーションが出来た
    }
    else
    {
        // アクティベーション出来なかった
    }
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
    echo '該当のユーザがいません。';
}
catch (Cartalyst\SEntry\Users\UserAlreadyActivatedException $e)
{
    echo 'すでにこのユーザは認証済みです。';
}

はい。ここまで。ログイン等のシステムも充実していて使いやすそう。

コメント

タイトルとURLをコピーしました