2015/06/01

システム管理者以外のユーザ情報を取得する


CakePHPも3ヶ月目になりました。
まだまだ、わからなくて頭を抱えています。

今回はbaserCMS3.xで
システム管理者(User)以外のデータ取得を勝手に自作したお話。
(コラッ)

ログイン関連は
lib/Baser
    └Controller/UsersController.php
                  /UserGroupsController.php
    └Lib/BcUtil.php
 あたりかと。

今回やりたかったのは
・画面にシステム管理者以外のユーザのログインIDを使用
・フッターに「○○様がログインしています。」を表示

システム管理者がログインしている場合

echo BcUtil::loginUser();

でひっぱれるのだが、
他の権限のユーザを表示できない。
(もしくはそういう関数に気づいてない?)

というわけで自分で作っちゃいます。

(1)core.phpに自作した認証ユーザをConfig::write

Configure::write('SiteUser', 'Mypage');
                                       ~~~~~~~
                                          ↑は適当に自分の認証設定に合わせる

(2)どこかに関数を自作
  私はひとまず、app/Libにlib/Baser/BcUtil.phpをコピペしてそこに追加しちゃいました。
   ※baserCMSのアップデートを考えてる人は絶対やらないでくだしさい。

/**
 * ログインしているMypageユーザーのデータを取得する
 *
 * @return array
 */
public static function loginSiteUser() {
$Session = new CakeSession();
$sessionKey = BcUtil::getLoginSiteUserSessionKey();
$user = $Session->read('Auth.' . $sessionKey);
if (!$user) {
if (!empty($_SESSION['Auth'][$sessionKey])) {
$user = $_SESSION['Auth'][$sessionKey];
}
}
return $user;
}

/**
 * ログインしているMypageユーザーのセッションキーを取得
 *
 * @return string
 */
public static function getLoginSiteUserSessionKey() {
        $sessionKey = Configure::read('SiteUser');
if (empty($sessionKey)) {
            // core.phpでSiteUserが設定されていない場合は
            // システム管理者の情報を取得・・・
$sessionKey = 'User';
}
return $sessionKey;
}

(3)お好きなコントローラで取得
        $userInfo =  BcUtil::loginSiteUser();
        $userId = $userInfo['id'];

これでログインしているMypageユーザの情報取得に成功しました。
後はコンポーネントにつっこめばいいのかな・・・。

というか、これでいいのかな。
CakePHPのヘルパーだったりコンポーネントだったりグローバル変数だったり
理解して作ってないからなぁ。。。

とりあえずできました。

0 件のコメント:

コメントを投稿