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 件のコメント:
コメントを投稿