[[PukiWiki/1.4]]

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

*ページの編集時にBasic認証を要求する [#v82f360b]

そんなに強固なものではないらしいんですが((根拠不明))。
気休めにはなるかもしれません。

閲覧は自由、編集はアカウントを持っている人だけ((commentやarticleなど、編集フォームを経由しない書き込みは別))という仕掛けをしてみました。

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

**パッチ(1.3 用) [#n52a7880]
-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"]);

**メモ [#ace2fa6c]
-edit_authですが、特定の文字列で始まるページ名のページだけを対象(または非対象)にできるようになれば、使い道が広がるかも。--[[reimy]]
--なぜか、edit_authのページを編集しても、表示に反映されないのでこっちに書き込みました -- [[reimy]] SIZE(10){2002-10-31 (木) 17:50:38}
-コメント移動しました。 -- [[ぱんだ]] SIZE(10){2002-11-01 (金) 09:29:56}
-この通りにやってみました。ユーザ名とパスワードを入れても、このサイトではユーザ名、パスワードとも空のままOKを押せば編集ができる。と同じ挙動になるんですけど、何がいけないのでしょうかね? -- [[upk]] SIZE(10){2002-11-04 (月) 00:43:18}
--あ痛 :) 今のロジックだとユーザ名を入れて、パスワードを空にすると、誰でも編集ができてしまいますね。直しました。 -- [[ぱんだ]] SIZE(10){2002-11-04 (月) 19:55:34}
--ふむ。パスワードも入れていたんですけど。まぁ、修正版で試してみますね。--[[upk]] SIZE(10){2002-11-05 (火) 02:04:43}
--なんか、分かりました。ユーザもパスワードも空のまま、OK を押すと、設定上、ユーザもパスワードも設定してあっても、かっとびますね。(私の設定があっていればですが)--[[upk]] SIZE(10){2002-11-05 (火) 02:09:58}
-この機能って言うのは特定のページだけつけることはできないのでしょうか? -- [[ゆうみ]] SIZE(10){2003-02-08 (土) 01:39:53}
-んー。edit_auth()内で$vars['page']を見ればいいんじゃないかと思いますが。「特定のページ」をどこでどのように定義するかいいアイデアありませんか? -- [[ぱんだ]] SIZE(10){2003-02-08 (土) 10:24:59}
-pukiwiki.ini.phpに書くのでよければ…(テストしていませんが) -- [[ぱんだ]] SIZE(10){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]] &new{2003-05-16 (金) 14:54:15};
-で、改造方法をまとめたんですが、このページに追加するには分量が多いので、別にページを起こした方がいいですかね。 -- [[Ynak]] &new{2003-05-16 (金) 14:55:26};
-とりあえず、作ってみました。../ちょっと便利に/BASIC認証で任意のページごとに閲覧制限や編集制限をかける方法 -- [[Ynak]] &new{2003-05-16 (金) 14:59:24};
--今はこっちですね。[[../ちょっと便利に/任意のページごとの閲覧・編集制限]] -- [[水無月神魔]] &new{2003-12-31 (水) 05:44:39};
- MwLwevojbluVnnZMbMs -- [[etcldbcvsxy]] &new{2008-11-30 (日) 03:01:17};
- iHBEznygoGaHUW -- [[skhklw]] &new{2008-11-30 (日) 03:01:22};

#comment
//#comment

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

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.048 sec.

OSDN