KOBAYASHI Ryo
lenoi****@zeros*****
2003年 9月 3日 (水) 13:37:57 JST
Lenoir です。 Naoki Takezoe <ADS28****@nifty*****> wrote: > その通りだと思います。私自身はFSWikiにおけるユーザ認証機能は > あくまで簡易的なもので、それほど重要視していませんでしたので > これまでも大きな機能強化はしていませんでした。 > > # サイト構築ツールとして使う場合に訪問者が編集できないようにしたり > # 内輪の人間のみユーザ登録して編集可能にするという程度の使い方を > # 想定していたわけです。 > > しかし、サポート掲示板や雑談掲示板を見るに、ユーザ認証機能への > 要望はかなり多いように感じますのでこの機会に少し考えてみようと思います。 > > # ただ、あまり複雑な仕組みにはしないつもりですが…。 そうですね。 竹添さんのポリシーはよくわかります。 現在のように管理者権限と一般権限(とanonymous)さえあれば、私の ように内輪で使っている分には、ほとんど全ての要求を満たすことが できると思います。 ユーザのグルーピングや、ページ毎のアクセスモードの管理なども、 確かに「あれば便利」な機能ですが、無くてもなんとかなりますし :) > > ソースは後ほどどこかにアップロードしておきます。 > > 公式サイトのプラグイン投稿などにポストしていただけるとよいかと。 > 取り込ませていただきたいと思います。 了解ですー。 ただし、私のプラグインに対する理解が不十分な可能性が非常に高 いので、幾つか弁解させて下さい(^-^;; 現在の FSWiki の API の add_admin_menu で登録したものは、管理 者ユーザがログインした時にしか表示されないようになっていますよ ね。 ですが、今回のパスワード変更機能の場合は、一般ユーザとしてロ グインしたときに使いたいものですので、メニュー項目をadd_admin_ menu で登録するわけにはいきません。 そこで、今回は Wiki.pm に以下の二つの API を追加してしまいまし た。(add_admin_menu / get_admin_menu のパクりです) sub add_user_menu { my $self = shift; my $label = shift; my $url = shift; my $weight = shift; push(@{$self->{"user_menu"}}, {label=>$label,url=>$url,weight=>$weight}); } sub get_user_menu { my $self = shift; return sort { $b->{weight}<=>$a->{weight} } @{$self->{"user_menu"}}; } さらに、&plugin::admin::Login::admin_form の中に、以下のコー ドを付け加えました。 $buf .="<ul>\n"; foreach($wiki->get_user_menu){ $buf .= "<li><a href=\"".$_->{url}."\">". $_->{label}."</a></li>\n"; } $buf .= "</ul>\n"; 以上の変更を加えることにより、add_user_menu 関数を使って、一 般ユーザ用の管理メニューを追加するようにしています。 しかし、上記の実装では Wiki.pm まで弄る事になってしまうので、 とてもお行儀が悪いです ;-( そこで、プラグイン投稿の方には、inline プラグインに書き換えた ものを置いておきました。 (もちろん、これは単体で動きます。) もし、今回のパスワード変更プラグイン以外にも、ログイン済みの 一般ユーザの管理メニューに表示したい機能が他にも幾つかあるので あれば、先述したような API (add_user_menu / get_user_menu) が あるとスマートかと思います。 ですが、私一人の需要のために API を追加して欲しいというのは かなり横暴かと思いますので、その辺りの判断はお任せします。 # プラグイン投稿のところに置いたインラインプラグインでも、 # Footer などに入れておけば十分かも知れません。 長文失礼しました。