内容

Crgst/laravel-user

仕様:

  • 「/」にアクセスするとログインページヘリダイレクト. ログイン中はマイページ(users.show)を表示.
  • テーブルは users, groups, users_groups の 3 つ. Sentry の標準そのまま.
  • RESTful な感じにする.
  • SessionsController がログインとかする.
  • ユーザーの作成とかは UsersController でやる.
  • ユーザー作成はメールアドレスとパスワードで.
  • シーディングで groups テーブルに管理者グループ(admin)とユーザーグループ(user)のデータ追加.
  • シーディングで users テーブルに管理者用のユーザーデータ追加.
  • admin はグループ管理(作成,削除,名前変更)が可能.
    さらに他のユーザーの全ての情報を閲覧・編集・削除出来る.
  • user は他の人のメールアドレスは見れないようにする.
  • 作成されるユーザーは user グループに属す.
  • 「api/users」で全ユーザーのデータを json 形式で取得する.
  • 「api/users/{id}」でユーザーのデータを json 形式で取得する.
  • ユーザーのメールアドレス, 姓, 名の編集機能.
  • ログイン中はユーザー作成出来ない. ただし管理者(admin ユーザー)は可能.
  • ユーザー作成後, 自動でログイン.
  • パスワードの変更機能. 現在のパスワードを入力させ, 正しければ変更画面を表示.

未完成:

  • パスワードリマインダー機能
  • ユーザー作成画面にパスワードの確認用を設置?
  • ユーザー作成時, 確認用のメール送信する.
  • ユーザーのプロフィール編集機能 (Sentry 標準の項目以外の任意のプロフィール項目).
  • ユーザー作成後, メールが届いてから完了画面に行かせて初めて登録完了になるようにする?
  • api 経由でユーザーの作成・編集・削除?(表示, 一覧は実装済み)
  • api 経由でログイン・ログアウト.
  • ...

その他:

  • ログイン判定処理をどこに置くのがいいか.
  • テスト(リダイレクトのテストがなぜか出来ない件).
  • ...

ルーティング

Route::get('/login', ['as' => 'sessions.create', 'uses' => 'SessionsController@create']);
Route::post('/login', ['as' => 'sessions.store', 'uses' => 'SessionsController@store']);
Route::delete('/logout', ['as' => 'sessions.destroy', 'uses' => 'SessionsController@destroy']);

Route::resource('groups', 'GroupsController');
Route::resource('users', 'UsersController');
Route::get('/users/{id}/password-check', ['as' => 'users.passwordCheck', 'uses' => 'UsersController@passwordCheck']);
Route::put('/users/{id}/password-check', ['as' => 'users._passwordCheck', 'uses' => 'UsersController@_passwordCheck']);
Route::get('/users/{id}/password-change', ['as' => 'users.passwordChange', 'uses' => 'UsersController@passwordChange']);
Route::put('/users/{id}/password-change', ['as' => 'users._passwordChange', 'uses' => 'UsersController@_passwordChange']);

Route::get('/api/users', ['as' => 'api.users.index', 'uses' => 'UsersController@indexJson']);
Route::get('/api/users/{id}', ['as' => 'api.users.show', 'uses' => 'UsersController@showJson']);
Route::get('/api/error', function()
{
    return 'error';
});

Route::get('/', function()
{
    if (Sentry::check()) {

        $user = $currentUser = Sentry::getUser();
        return View::make('users.show', compact('user', 'currentUser'));
    }
	return Redirect::route('sessions.create');
});

php artisan routes で確認:

+--------+-------------------------------------+-----------------------+---------------------------------+----------------+---------------+
| Domain | URI                                 | Name                  | Action                          | Before Filters | After Filters |
+--------+-------------------------------------+-----------------------+---------------------------------+----------------+---------------+
|        | GET|HEAD login                      | sessions.create       | SessionsController@create       |                |               |
|        | POST login                          | sessions.store        | SessionsController@store        |                |               |
|        | DELETE logout                       | sessions.destroy      | SessionsController@destroy      |                |               |
|        | GET|HEAD groups                     | groups.index          | GroupsController@index          |                |               |
|        | GET|HEAD groups/create              | groups.create         | GroupsController@create         |                |               |
|        | POST groups                         | groups.store          | GroupsController@store          |                |               |
|        | GET|HEAD groups/{groups}            | groups.show           | GroupsController@show           |                |               |
|        | GET|HEAD groups/{groups}/edit       | groups.edit           | GroupsController@edit           |                |               |
|        | PUT groups/{groups}                 | groups.update         | GroupsController@update         |                |               |
|        | PATCH groups/{groups}               |                       | GroupsController@update         |                |               |
|        | DELETE groups/{groups}              | groups.destroy        | GroupsController@destroy        |                |               |
|        | GET|HEAD users                      | users.index           | UsersController@index           |                |               |
|        | GET|HEAD users/create               | users.create          | UsersController@create          |                |               |
|        | POST users                          | users.store           | UsersController@store           |                |               |
|        | GET|HEAD users/{users}              | users.show            | UsersController@show            |                |               |
|        | GET|HEAD users/{users}/edit         | users.edit            | UsersController@edit            |                |               |
|        | PUT users/{users}                   | users.update          | UsersController@update          |                |               |
|        | PATCH users/{users}                 |                       | UsersController@update          |                |               |
|        | DELETE users/{users}                | users.destroy         | UsersController@destroy         |                |               |
|        | GET|HEAD users/{id}/password-check  | users.passwordCheck   | UsersController@passwordCheck   |                |               |
|        | PUT users/{id}/password-check       | users._passwordCheck  | UsersController@_passwordCheck  |                |               |
|        | GET|HEAD users/{id}/password-change | users.passwordChange  | UsersController@passwordChange  |                |               |
|        | PUT users/{id}/password-change      | users._passwordChange | UsersController@_passwordChange |                |               |
|        | GET|HEAD api/users                  | api.users.index       | UsersController@indexJson       |                |               |
|        | GET|HEAD api/users/{id}             | api.users.show        | UsersController@showJson        |                |               |
|        | GET|HEAD api/error                  |                       | Closure                         |                |               |
|        | GET|HEAD /                          |                       | Closure                         |                |               |
+--------+-------------------------------------+-----------------------+---------------------------------+----------------+---------------+

シーディング

class UsersAndGroupsTableSeeder extends Seeder
{

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

        $group = Sentry::createGroup([
            'name'        => 'admin',
            'permissions' => ['admin' => 1]
        ]);
        Sentry::createGroup([
            'name'        => 'user',
            'permissions' => ['user' => 1]
        ]);


        $user = Sentry::createUser([
            'email'     => 'admin@example.com',
            'password'  => 'passwd',
            'activated' => true,
            'first_name' => 'Administrator',
            'last_name' => '',
        ]);
        $user->addGroup($group);
    }

}