閲覧権限のないページを見ると,対象となるページの閲覧は制限されますが,それに付随する 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; }
lib/auth.php : 218行目付近 $page = str_replace('$1', make_search($page), $title_cannot); + global $vars; + $vars['cmd'] = 'error'; catbody($title, $page, $body); exit;
--- 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)
--- 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">