PukiWiki/1.4

しろくろのへや:edit_authより移動してきました。 -- ぱんだ

ページの編集時にBasic認証を要求する

そんなに強固なものではないらしいんですが*1。 気休めにはなるかもしれません。

閲覧は自由、編集はアカウントを持っている人だけ*2という仕掛けをしてみました。

編集をクリックしたときにダイアログが表示されます。 キャンセルを押すと「編集できません」と表示されます。 正しいユーザ名とパスワードを入力してOKを押すと編集フォームが表示されます。

パッチ(1.3 用)

  • ja.lng, en.lngに追加(文言は適当に変えてください。日本語は使わないほうがいいかも。)
    $_msg_auth = 'Page Edit';
  • pukiwiki.ini.phpに追加
    /////////////////////////////////////////////////
    // 編集時に認証が必要か
    $edit_auth = 1;
    
    /////////////////////////////////////////////////
    // 編集時認証のアカウント
    // ユーザ名とパスワードを記入。
    $edit_auth_users = array(
     '' => '',
    );
  • func.phpに追加
    function edit_auth() {
    	global $get,$_title_cannotedit;
    	global $edit_auth,$edit_auth_users,$_msg_auth;
    
    	if ($edit_auth and
    		(!isset($_SERVER['PHP_AUTH_USER']) or
    		 !array_key_exists($_SERVER['PHP_AUTH_USER'],$edit_auth_users) or
    		 $edit_auth_users[$_SERVER['PHP_AUTH_USER']] != $_SERVER['PHP_AUTH_PW']))
    	{
    		header('WWW-Authenticate: Basic realm="'.$_msg_auth.'"');
    		header('HTTP/1.0 401 Unauthorized');
    		// press cancel.
    		$body = $title = str_replace('$1',htmlspecialchars(strip_bracket($get['page'])),$_title_cannotedit);
    		$page = str_replace('$1',make_search($get['page']),$_title_cannotedit);
    		catbody($title,$page,$body);
    		exit;
    	}
    }
  • pukiwiki.php
    --- pukiwiki.php.orig	2002-10-28 09:06:58.000000000 +0900
    +++ pukiwiki.php	2002-10-28 09:08:51.000000000 +0900
    @@ -103,6 +103,7 @@
     // 追加
     else if(arg_check("add"))
     {
    +	edit_auth();
     	$title = str_replace('$1',htmlspecialchars(strip_bracket($get["page"])),$_title_add);
     	$page = str_replace('$1',make_search($get["page"]),$_title_add);
     	$body = "<ul>\n";
    @@ -113,6 +114,7 @@
     // 編集
     else if(arg_check("edit"))
     {
    +	edit_auth();
             $postdata = @join("",get_source($get["page"]));
     	if($postdata == '') {
     		$postdata = auto_template($get["page"]);
    @@ -124,6 +126,7 @@
     // プレビュー
     else if(arg_check("preview") || $post["preview"] || $post["template"])
     {
    +	edit_auth();
             if($post["template"] && page_exists($post["template_page"]))
     	{
     		$post["msg"] = @join("",get_source($post["template_page"]));
    @@ -195,6 +198,7 @@
     // 書き込みもしくは追加もしくはコメントの挿入
     else if($post["write"])
     {
    +	edit_auth();
     	$post["msg"] = preg_replace("/^#freeze\n/","",$post["msg"]);
     	$postdata_input = $post["msg"];
     
    @@ -720,6 +724,7 @@
     		//$body = "指定されたページは見つかりませんでした。";
     
     		if(preg_match("/^(($BracketName)|($WikiName))$/",$get["page"])) {
    +			edit_auth();
     			$title = str_replace('$1',htmlspecialchars(strip_bracket($get["page"])),$_title_edit);
     			$page = str_replace('$1',make_search($get["page"]),$_title_edit);
     			$template = auto_template($get["page"]);

メモ

  • edit_authですが、特定の文字列で始まるページ名のページだけを対象(または非対象)にできるようになれば、使い道が広がるかも。--reimy
    • なぜか、edit_authのページを編集しても、表示に反映されないのでこっちに書き込みました -- reimy 2002-10-31 (木) 17:50:38
  • コメント移動しました。 -- ぱんだ 2002-11-01 (金) 09:29:56
  • この通りにやってみました。ユーザ名とパスワードを入れても、このサイトではユーザ名、パスワードとも空のままOKを押せば編集ができる。と同じ挙動になるんですけど、何がいけないのでしょうかね? -- upk 2002-11-04 (月) 00:43:18
    • あ痛 :) 今のロジックだとユーザ名を入れて、パスワードを空にすると、誰でも編集ができてしまいますね。直しました。 -- ぱんだ 2002-11-04 (月) 19:55:34
    • ふむ。パスワードも入れていたんですけど。まぁ、修正版で試してみますね。--upk 2002-11-05 (火) 02:04:43
    • なんか、分かりました。ユーザもパスワードも空のまま、OK を押すと、設定上、ユーザもパスワードも設定してあっても、かっとびますね。(私の設定があっていればですが)--upk 2002-11-05 (火) 02:09:58
  • この機能って言うのは特定のページだけつけることはできないのでしょうか? -- ゆうみ? 2003-02-08 (土) 01:39:53
  • んー。edit_auth()内で$vars['page']を見ればいいんじゃないかと思いますが。「特定のページ」をどこでどのように定義するかいいアイデアありませんか? -- ぱんだ 2003-02-08 (土) 10:24:59
  • pukiwiki.ini.phpに書くのでよければ…(テストしていませんが) -- ぱんだ 2003-02-08 (土) 10:25:55
    pukiwiki.ini.php
    /////////////////////////////////////////////////
    // 編集に認証が必要なページ名を正規表現で記入。
    // メタキャラクタは適宜エスケープしてください。
    $edit_auth_pages = array(
        '', //すべてのページ
    //  '^AuthRequired\/', // 'AuthRequired/'で始まるページ
    // '(?!)',  // すべてのページで認証が不要なとき :)
    );
    edit_auth()を修正
    function edit_auth() {
    	global $get,$_title_cannotedit;
     	global $edit_auth,$edit_auth_users,$_msg_auth;
    + 	global $vars,$edit_auth_pages;
    
    	if ($edit_auth and
    +	    preg_match('/'.join('|',$edit_auth_pages).'/',$vars['page']) and
    		(!isset($_SERVER['PHP_AUTH_USER']) or
  • このページの方法とぱんださんのコメントの方法を更に拡張して、任意のページごとに閲覧制限や編集制限をかけることができるようにしてみました。なかなか快適です。 -- Ynak 2003-05-16 (金) 14:54:15
  • で、改造方法をまとめたんですが、このページに追加するには分量が多いので、別にページを起こした方がいいですかね。 -- Ynak 2003-05-16 (金) 14:55:26
  • とりあえず、作ってみました。../ちょっと便利に/BASIC認証で任意のページごとに閲覧制限や編集制限をかける方法 -- Ynak 2003-05-16 (金) 14:59:24

*1 根拠不明
*2 commentやarticleなど、編集フォームを経由しない書き込みは別

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-11-30 (日) 10:06:14
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.256 sec.

OSDN