[baserCMS] マイページ開発

baserCMS では、認証された特定のユーザーにのみマイページのようなサービスを提供したい場合、ログイン認証部分を簡単に準備できる API を備えています。
今回は、baserCMS が提供している、 ```Member``` モデルと、 ```MembersController``` を利用してマイページのログイン認証を実装する開発例をご紹介します。

## ログインページの準備とログイングループ、ユーザーの追加
### 基本設定
マイページのログイン認証の基本設定は、baserCMSが提供する設定ファイルで行います。 
```/app/Config/setting.php``` に次のコードを記述します。

<pre><code class="php">
<?php
$config['BcAuthPrefix'] = array(
    'mypage' => array(
        // 認証名
        'name'            => 'マイページ',
        // URLに利用するプレフィックス
        'alias'            => 'mypage',
        // ログイン完了後にリダイレクトするURL
        'loginRedirect'    => '/mypage/members/index',
        // ログイン画面に表示するタイトル
        'loginTitle'    => 'マイページログイン',
        // ユーザー管理に利用するモデル
        'userModel'        => 'Member',
        // ログイン画面のURL
        'loginAction'    => '/mypage/members/login',
        // ログアウトを実行するURL
        'logoutAction'=> '/mypage/members/logout',
        // ツールバーの利用可否
        'toolbar'        => false,
        // セッションキー（デフォルトは管理システムと同じキー）
        'sessionKey'    => 'User'
    )
);
</pre></code>
このコードは、```/lib/Baser/Config/setting.php``` に記載されており、そのファイルに記載されている設定は、全て、 ```/app/Config/setting.php``` で上書き可能です。
　

### 認証グループ設定
次に管理システムにログインし、フロントサイドにログインする事ができるユーザーグループを作成します。
基本設定を行った事で、ユーザーグループの追加画面に、「認証プレフィックス設定」という項目が表示されていますので、「マイページ」にチェックを入れて保存します。
　
### ユーザー追加
認証グループ設定で追加したユーザーグループに所属するユーザーを作成します。
　
### ログインページの確認
```http://[baserCMSの設置場所]/mypage/users/login``` にアクセスし、ログインページが表示され、先ほど追加したユーザーでログインができる事を確認します。
　
## マイページコンテンツの作成Edit
### カスタマイズの準備
baserCMS が提供している ```MemberController``` には、 ```mypage_index``` メソッドのみの定義があり、他のコンテンツを表示するメソッドはありません。 ```mypage_index``` をカスタマイズしたり、新しいコンテンツを追加するには、このクラスが記述しているファイルを ```/app/Controller/``` にコピーしてからカスタマイズを行うと、baserCMS のコアをアップデートしやすくなります。
これは、モデルやビューにおいても同様の事が言えます。


<pre><code class="php">
 # コントローラーのカスタマイズ
 /lib/Baser/Controller/MembersController.php
        ↓
 /app/Controller/MembersController.php

 # モデルのカスタマイズ
 /lib/Baser/Model/Member.php
        ↓
 /app/Model/Member.php

 # レイアウトのカスタマイズ
 /lib/Baser/View/Layouts/mypage/default.php
        ↓
 /app/View/Layouts/mypage/default.php

 # ログインページのカスタマイズ
 /lib/Baser/View/Members/mypage/login.php
        ↓
 /app/View/Members/mypage/login.php

</pre></code>

### 認証コンテンツの仕組み
```MembersController``` は、```UsersController``` を継承している為、自動的に、```mypage_login```、 ```mypage_logout```、 ```mypage_login_exec```、```mypage_password``` 以外のメソッドについて認証がかかる仕様となっています。
メソッドのプレフィックスによって、認証対象となるユーザーグループが決定される仕組みとなっていますので、今回作成しているマイページにおける認証コンテンツを作成するには、メソッド名にプレフィックスとして ```mypage_``` を付け加えます。
　
## ユーザーテーブルを変更する
今回、```Member``` モデルを利用していますが、baserCMS が提供している、 ```users``` テーブルを利用する仕様となっています。
これは、```Member::$useTable``` に ```users``` が明示的に定義されている為です。
管理ユーザーと、会員ユーザーを別管理にしたい場合など、```users``` テーブル以外で、ユーザーを管理したい場合は、別途テーブルを準備し、```Member::$useTable``` で明示的に指定すれば変更可能となります。
ただし、その際、２点注意事項があります。

### 1. UserGroup モデルとの関連付け
baserCMSが提供する、Member モデルは、User モデルを継承している為、UserGroup モデルとアソシエーションする前提となっています。別途テーブルを準備する場合、user_group_id フィールドを準備し、UserGroup と関連付けを行わないと、ユーザーグループで登録している、認証プレフィックス設定が無効となり正常に動作しません。
無効とする前提の場合は、別途ユーザー管理用のモデルを準備した方が無難な選択です。

### 2. ユーザー管理機能の作成
baserCMSが提供するユーザー管理機能は、```users``` テーブルのユーザーを管理する為の機能となりますので、テーブルを変更した場合、その機能では管理する事ができません。
別途準備した、テーブルに対する、一覧、新規登録、編集、削除等の管理機能は、独自で実装する必要があります。