LOGIN ID Password Auto Login Register Now! Lost Password?
Xoops Q&A

ゲスト時、登録ユーザ時、サイト情報 の admin をクリックしても、基本情報が表示されない。

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2014/6/1 23:52
hasuo  2nd Class   投稿数: 29
こんにちは。いつもお世話になっています。
私は XOOPS Cube Legacy 2.2.3 Beta 1 を利用しています。

最近、legacy(互換モジュール ver 2.03)の中にあるブロック、サイト情報 をトップページ右に表示しています。そこから管理人の基本情報を登録ユーザさん、ゲストさんにも見れるようにしたいのですが、設定の方法が分からずに困っています。
アバターの下に表示されている管理人名にリンクが張ってあり、クリックすると管理人の基本情報が表示されるようになっていますよね。これをうまく動作させる事が出来ずにいます。
状況は下記のとおりです。

・管理人 でログイン時 ”管理人名クリック” にて基本情報が表示されます。
・登録ユーザ でログイン時 ”管理人名クリック” しても基本情報は表示されません。トップページが再表示されるだけです。
・ログインしていない時(ゲスト時) ”管理人名クリック” しても基本情報は表示されません。トップページが再表示されるだけです。

アクセス権限の管理をしているのは
・ユーザモジュール → グループ管理 → パーミッション
で行っていると認識しているのですが、登録ユーザの方達にも管理人の基本情報が確認できるよう、表示するようにしたいのですがうまく行きません。


バグとは思えませんので、きっと設定が悪いのだと思っているのですが、どなたか設定の方法をお教え願います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2014/6/3 22:39
nao-pon  Lieutenant   投稿数: 488
hasuo さん、こんにちは。

XOOPS X では標準で、ユーザー情報が自分自身のもの以外は閲覧できなくなるプリロード(html/preload/UserInfoProtector.class.php)が配置されています。

このプリロードは、個人情報の保護目的で入っていると思うのですが、トップページへのリダイレクト時にメッセージが何もなかったり、サイトオーナーでも他のユーザの情報を閲覧することができないなど、少々使い勝手が悪い印象です。

そこで、ご所望の管理者の情報はすべて開示することと、サイトオーナーは、全ユーザー情報を閲覧可能とするように改造してみました。

<?php

/**
 * @brief This site preload bans access to userinfo. (A user can access self page.) 
 * 
 * If you need more expressions, you may modify a template.
 * 
 * @see http://sourceforge.net/tracker/index.php?func=detail&aid=1718508&group_id=159211&atid=943472
 */
class UserInfoProtector extends XCube_ActionFilter
{
	function preBlockFilter()
	{
		$root =& XCube_Root::getSingleton();
		$delegateMgr =& $root->getDelegateManager();
		
		$delegateMgr->add('Legacypage.Userinfo.Access',
			"UserInfoProtector::rightCheck",
			XCUBE_DELEGATE_PRIORITY_2);
	}
	
	function rightCheck()
	{
		$root =& XCube_Root::getSingleton();
		
		// 管理者のユーザ情報は全ての訪問者に無条件で表示
		$requestUid = $root->mContext->mRequest->getRequest('uid');
		$handler = xoops_gethandler('member');
		$requesUser = $handler->getUser(intval($requestUid));
		if ($requesUser->isAdmin()) return;

		// 非ログインユーザー(ゲスト)はトップページへリダイレクト
		if (!$root->mContext->mUser->mIdentity->isAuthenticated()) {
			$root->mController->executeForward(XOOPS_URL);
		}
		
		// サイトオーナーは無条件でユーザ情報を閲覧可能
		if ($root->mContext->mUser->isInRole('Site.Owner')) return;

		// ログインユーザーは自分自身のユーザ情報のみ閲覧可
		$uid = $root->mContext->mXoopsUser->get('uid');
		if ($uid != null && $uid != $requestUid) {
			$root->mController->executeForward(XOOPS_URL);
		}
	}
}

?>

以上の内容で、preload/UserInfoProtector.class.php を保存して動作を確認してみてください。

問題がなければ、chmod -w などとして、書き込み権限を外して下さい。(これは、X-update で legacy アップデート時に変更内容が上書きされないようにするためです。)
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2014/6/4 12:37
hasuo  2nd Class   投稿数: 29
nao-ponさん、いつもお世話になっています。

丁寧なご説明ありがとうございます。現状の動作が正常なのですね。
加えて、貴重なコードを教えて頂き、ありがとうございます。

さっそく試してみます。結果もご報告させて頂きます。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2014/6/4 15:05
hasuo  2nd Class   投稿数: 29
nao-pon さんへ

うまく行きました。


非ログインユーザー(ゲストさん)には、プライベートメッセージの表示なし。ログインユーザーにはプライベートメッセージの表示ありとなり、これも希望していた動作です。


また、”新しい登録ユーザー”ブロック (管理者メニュー → ALTSYS → ブロック管理 → ユーザモジュール → 新しい登録ユーザー) を表示して確認したところ、非ログインユーザー(ゲストさん)ではトップページへリダイレクト。サイトオーナーでは閲覧可能となりました。

いつもありがとうございます。

しかし複雑ですね…いろいろと操作をして動き方を認識して行かないと駄目ですね。頑張りますぅ~

投票数:0 平均点:0.00
  条件検索へ

Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities