閲覧権限のないMenuBarが表示される.

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

メッセージ

閲覧権限のないページを見ると,対象となるページの閲覧は制限されますが,それに付随する 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の構造も知らないので,私の力量ではここでお手上げになってしまいました.

修正内容

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

パッチ

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;
		}

関連


コメント

  • MenuBarってskinから呼んでいる関係上、リダイレクトできないんですよねぇ…。一番手っ取り早いのは、認証する際にメニューを表示しないように小細工する方法ですが、例えばこんな感じでやってしまうのも手ですね。 -- teanan 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 2006-04-22 (土) 02:18:44
      • teananさんの方針でうまくいきました.menuプラグインを以下のようにして,pukiwki.skin.php の arg_check('read') をはずしてみましたが,menu の改造前後で差が分かりませんでした.menu で check をしない問題点をお教えいただけますでしょうか? -- しましま 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 2006-04-23 (日) 02:52:18
  • read 以外のlistやrecentのときにもmenuプラグインが呼ばれて表示されたりということですね.
    defaultスキンでarg_check('read')をはずして実験してみました.menu.inc.php 側にはパッチが特になくても,上記の auth.php だけのパッチだけでOKのようでした.
    どうもありがとうございました. -- しましま 2006-04-23 (日) 11:23:37


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-04-23 (日) 11:33:26
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.312 sec.

OSDN