トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

ログインユーザ情報の取得_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」を置いておきました。参考までにご利用くださいませ。

xoops_GetUserInfoModule_20051108.zip(145)

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.