ログインユーザ情報の取得_XOOPS
ログインユーザ情報の取得
XOOPS自身は、ログインしたときのユーザ情報をセッション(xoopsデータベース上の「xoops_session」テーブル)として保持しています。ですが、このユーザ情報はグローバルなクラス「$xoopsUser」より取得することができるようになっています。
以降、プログラムソースであるPHPファイル内での記述となります。必ずPHPファイルの先頭で「require('header.php');」のように「header.php」(../../mainfile.php)を呼んだ後に下記のユーザ判定を行うようにしてください。
ユーザがログインしているかどうかの判定
if(empty($xoopsUser)) { // ログインされていない }
「$xoopsUser」が存在しない場合、これはログインすらしていない、ということになります。ただし、モジュールを普通にインストールした状態では モジュールを呼び出した段階でXOOPSシステム自身がエラーメッセージを出してアクセス拒否を行います。これを回避するには、システム管理の「グループ管理」にて「ゲスト」ユーザに対象のモジュールにアクセスする権限を与えてあげる必要があります。
例えば、ログインしていないときにXOOPSトップページに強制的に戻したい場合は、以下のようにします。
if(empty($xoopsUser)) { // ログインされていない場合 include_once(XOOPS_ROOT_PATH.'/index.php'); exit(); }
「include_once(XOOPS_ROOT_PATH.'/index.php');」にて、
http://www.xx.yy.zz/xoops/index.php
のようなトップページに飛ばしています。XOOPS_ROOT_PATHは、XOOPSのルートのURLのdefine定義です(末尾に「/」を含みません)。
ユーザ名・ユーザIDの取得
$uname = ''; &uid = 0; if(!empty($xoopsUser)) { // ユーザがログインしている // ユーザ名の取得 $uname = $xoopsUser->getVar('uname'); if($uname == '') { $uname = $xoopsUser->getVar('name'); } // ユーザIDの取得 $uid = $xoopsUser->getVar('uid'); }
「$xoopsUser」が存在する場合に、「$xoopsUser->getVar('xxxx');」にてログインしているユーザの情報を取得します。$xoopsUser->getVarは、実際はxoopsデータベースのテーブル「xoops_users」内のカラム名を指定することで、そのパラメータを取得してきています。
MySQLのコマンドラインにて、SQL文にて
select uname from xoops_users where uid=ログインしたユーザのID;
のようにしたときに取れる値ですね。
select uname from xoops_users where uid=1;
MySQLのコマンドラインにて上記のようにすると、XOOPSシステム管理者のユーザ名が表示されることになります。
PHPソース内で
$uname = $xoopsUser->getVar('uname');
とすると、$unameにxoops_usersテーブル内の「uname」カラムの値が入ります。つまり、ログインユーザの本名が入ります。
$uname = $xoopsUser->getVar('name');
にて、ログインユーザ名を取得しています。上記プログラムでは、ログインしたユーザの本名が存在しなければ、ログインユーザ名を$unameに入れるようにしています。
$uid = $xoopsUser->getVar('uid');
にて、ログインしたユーザのIDを取得します。実際のユーザ判別時にはこのユーザIDをキーにすることが多いかと思います。
ログインしているユーザの所属グループを取得
XOOPSでは、ログインした一ユーザに対して複数のアクセス権限を持たせることができます。このアクセス権限は「グループ」として管理されており、「システム管理」の「グループ管理」にて「グループに所属するユーザ」を追加することができます(このへん、インターフェースが少し悪いなぁ。逆に「ユーザ管理」でユーザが所属するグループを変えることもできます)。
PHPソースでは、以下のようにしてログインユーザが所属するグループを取得してくることができます。
// ログインユーザIDの取得 $uid = $xoopsUser->getVar('uid'); // ログインユーザが所属するグループ情報の取得 $member_handler =& xoops_gethandler('member'); $User = new xoopsUser($uid); $user_groups = $User->getGroups(); $cou = count($user_groups); // 所属しているグループの数 for($i = 0; $i < $cou; $i++) { $thisGroup =& $member_handler->getGroup($user_groups[$i]); $gid = $thisGroup->getVar('groupid'); // グループIDの取得 $gname = $thisGroup->getVar('name'); // グループ名の取得 }
実際のデータベース上では、「xoops_groups_users_link」テーブルよりグループIDとユーザIDの結びつきの情報が格納されています(カラムgroupid/uid)。このテーブルからuidに対応するgroupidを抜き出して、「xoops_groups」テーブル内の検索groupdidと一致するnameを取り出すと、それがグループ名になっています。
デフォルトで指定可能なグループは以下のようになっています(グループ管理にてグループ自身を新設することも可能です。その場合、グループIDは4以降がつけられます)。
グループID | グループ名 |
---|---|
1 | サイト管理者 |
2 | 登録ユーザ |
3 | ゲスト |
ログインしたユーザのグループ情報が取得できれば、グループにより表示内容や入力内容を分岐させる、ということもできますね。
サンプルモジュールのダウンロード
上記のユーザ情報を表示するサンプル「GetUserInfoModule」を置いておきました。参考までにご利用くださいませ。
Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.