* 閲覧権限のないMenuBarが表示される. [#m5af2f08]

- ページ: [[BugTrack2]]
- 投稿者: [[しましま]]
- 優先順位: 重要
- 状態: 提案
- カテゴリー: 本体バグ
- 投稿日: 2006-04-22 (土) 01:26:12
- バージョン: 1.4.6

#contents

-----
** メッセージ [#ed9b5d63]
閲覧権限のないページを見ると,対象となるページの閲覧は制限されますが,それに付随する MenuBar は閲覧権限がなくても表示されて,閲覧できてしまいます.

 define('MENU_ENABLE_SUBMENU', TRUE);
とすることで,ディレクトリごとに MenuBar を変更して,ディレクトリごとに閲覧制限をかけて,権限によってメニューを変えています.
しかし,上記の問題があって,意図したことが実現できません.

menu.inc.phpプラグインを修正すれば対処できるのではと思い
 --- menu.inc.php.orig	2006-04-20 22:23:58.000000000 +0900
 +++ menu.inc.php	2006-04-22 00:35:19.000000000 +0900
 @@ -47,6 +47,8 @@
 
 		if (! is_page($page)) {
 			return '';
 +		} else if (!check_readable($page, false, false)) {
 +			return '';
 		} else if ($vars['page'] == $page) {
 			return '<!-- #menu(): You already view ' . htmlspecialchars($page) . ' -->';
 		} else {
のように check_readable 関数を加えてみましたが,
 Headers already sent at [サイトのルート]/lib/html.php line 496.
のエラーで止まってしまいました.
PHPも,PukiWikiの構造も知らないので,私の力量ではここでお手上げになってしまいました.

** 修正内容 [#w9cb270c]

認証中失敗時にはページを表示しないように cmd を変更する.(Thanks teanan さん)

** パッチ [#x205ea91]
lib/auth.php
 --- auth.php.orig	2006-04-22 10:33:22.000000000 +0900
 +++ auth.php	2006-04-22 12:51:40.000000000 +0900
 @@ -168,7 +168,7 @@
 // Basic authentication
 function basic_auth($page, $auth_flag, $exit_flag, $auth_pages, $title_cannot)
 {
 -	global $auth_method_type, $auth_users, $_msg_auth;
 +	global $auth_method_type, $auth_users, $_msg_auth, $vars;
 
 	// Checked by:
 	$target_str = '';
 @@ -216,6 +216,7 @@
 			$body = $title = str_replace('$1',
 				htmlspecialchars(strip_bracket($page)), $title_cannot);
 			$page = str_replace('$1', make_search($page), $title_cannot);
 +			$vars['cmd'] = 'auth_error';
 			catbody($title, $page, $body);
 			exit;
 		}

*[[関連>PukiWiki/1.4/ちょっと便利に/任意のページごとの閲覧・編集制限/関連ページ]] [#l74bae8c]
#include(PukiWiki/1.4/ちょっと便利に/任意のページごとの閲覧・編集制限/関連ページ,notitle)

--------
*コメント [#qf4d86bd]
- MenuBarってskinから呼んでいる関係上、リダイレクトできないんですよねぇ…。一番手っ取り早いのは、認証する際にメニューを表示しないように小細工する方法ですが、例えばこんな感じでやってしまうのも手ですね。 -- [[teanan]] &new{2006-04-22 (土) 02:17:29};
 lib/auth.php : 218行目付近
	$page = str_replace('$1', make_search($page), $title_cannot);
 +	global $vars;
 +	$vars['cmd'] = 'error';
	catbody($title, $page, $body);
	exit;
-- skinで「arg_check("read")」がかかっている前提だとこれでいいのですが、デザイン上、この条件を取り除いてしまうこともあります。明示的にmenuプラグインの中で「arg_check("error")」を判断した方がいいのかもしれません。 -- [[teanan]] &new{2006-04-22 (土) 02:18:44};
--- teananさんの方針でうまくいきました.menuプラグインを以下のようにして,pukiwki.skin.php の arg_check('read') をはずしてみましたが,menu の改造前後で差が分かりませんでした.menu で check をしない問題点をお教えいただけますでしょうか? -- [[しましま]] &new{2006-04-22 (土) 13:27:22};
 --- menu.inc.php.orig	2006-04-22 13:34:27.000000000 +0900
 +++ menu.inc.php	2006-04-22 13:29:32.000000000 +0900
 @@ -16,6 +16,8 @@
 	global $vars, $menubar;
 	static $menu = NULL;
 
 +    if (arg_check('auth_error')) return('');
 +
 	$num = func_num_args();
 	if ($num > 0) {
 		// Try to change default 'MenuBar' page name (only)

--- teananさんが書いているのは、たとえば配布しているpukiwki.skin.php では単語検索や一覧表示時はメニューバーが出ませんが、人によっては常時出したいと考えて、以下のように改造している可能性があり、このとき結果が違ってくるという事を言っているのでは?
 --- pukiwiki_orig.skin.php      Fri Apr 21 00:25:32 2006
 +++ pukiwiki.skin.php   Sat Apr 22 22:03:51 2006
 @@ -166,7 +166,7 @@
 
  <?php echo $hr ?>
 
 -<?php if (arg_check('read') && exist_plugin_convert('menu')) { ?>
 +<?php if (exist_plugin_convert('menu')) { ?>
  <table border="0" style="width:100%">
   <tr>
    <td class="menubar">
--- そのとおりです。フォローありがとうございます :) -- [[teanan]] &new{2006-04-23 (日) 02:52:18};
--- read 以外のlistやrecentのときにもmenuプラグインが呼ばれて表示されたりということですね.~
defaultスキンでarg_check('read')をはずして実験してみました.menu.inc.php 側にはパッチが特になくても,上記の auth.php だけのパッチだけでOKのようでした.~
どうもありがとうございました. -- [[しましま]] &new{2006-04-23 (日) 11:23:37};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.101 sec.

OSDN