ページの作成や編集にはユーザ登録が必要です。
ユーザ属性とページ参照権の拡張
- 投稿者: まかまか
- カテゴリ: 新規
- 優先度: 低
- 状態: 提案
- 日時: 2004年03月24日 20時13分35秒
内容
- ログインユーザ毎に任意のデータ構造を永続化させられるようにする。
- ユーザ属性にグループを追加する。
- ページ毎に、ユーザ別・グループ別に参照の可否を設定できるようにする。
実際は上の二番目と三番目のためにつくってみました。
導入
pluginディレクトリにuser_exディレクトリ一式をいれます。
EX_user.datとEX_showlevel.logをconfigディレクトリ(変更している場合は適宜読み替えてください)に入れ、パーミッションを(CGIから書き込めるように)適切に設定します。EX_user.datはconfig.datにEX_userdat_fileを指定することで変更できます。
管理画面からuser_exプラグインをonにすれば完了です。
使用方法
管理画面の「グループの設定」から、既に登録されているユーザにグループを割り当ててください。グループIDは半角英数字とアンダーバーが使用できます。adminは特別なグループ名で、拡張参照権が設定されている全てのページの参照が許可されます。
「ページの権限設定」で必要なページの参照可能ユーザ、グループを設定してください。ユーザ、グループ共に一つのページに複数設定できます。
ページに設定した参照可能ユーザ、グループ指定は、それぞれ一括して削除できます。
管理者の場合は、編集画面にそのページに対して拡張参照権を設定できるフォームが現れます。
参照の可否判定の流れ
そのページに……
- 拡張参照権が設定されていない場合→通常のcan_showによる判定
- (ユーザ、グループを問わず)何らかの拡張参照権が設定されている場合
- ログインしていない→不許可
- ログインしている
- userタイプが「管理者」→許可
- user idがそのページで参照可になっている→許可
- group idがadmin→許可
- group idがそのページで参照可になっている→許可
- どれにも該当しない→不許可
メソッド
グループ設定や拡張参照権の設定機能を利用するにあたって、これらのメソッドを理解する必要はありません。ユーザ毎に任意のデータ構造をもたせるプラグインをつくる場合は、set_user_data, get_user_data, delete_data_strを使います。
以下のメソッドがWiki.pmに追加されます。
# $wiki = new Wiki;
- $wiki->set_user_data()
- $wiki->get_user_data()
- $wiki->set_group_id()
- $wiki->get_group_id()
- $wiki->delete_data_str()
- $wiki->set_page_list_ex()
- $wiki->get_page_list_ex()
- $wiki->set_page_level_ex()
- $wiki->get_page_level_ex()
これらのメソッド使用方法はplugin::user_ex::Core.pmファイルをみてください。
上書きされるメソッド
- $wiki->can_show()
その他
これ以外にも、Storage用のメソッドが必要となり、現状ではWiki::DefaultStorageにのみ対応しています。詳細についてはplugin::user_ex::Core.pmをみてください。
注意点
- 3.5.2でしか確認していません。
- このプラグインが対応するストレージは、現状ではWiki::DefaultStorageだけです。
コメント
- ユーザー毎、グループ毎にEDITの可否もできるようになればいいですね - 夢丸 (2004年05月17日 23時30分48秒)
- Wiki3.6.1wo - 初心者 (2006年06月12日 17時29分37秒)
- Wiki3.6.1を利用しているのですが、ページの権限設定 -で syntax error at (eval 44) line 1, near ""$D = [{""GROUP"" が出てしまいます。 - 初心者 (2006年06月12日 17時31分35秒)
- 3.6.1には対応していないようなのですが、非常に便利なのでよろしくお願いしますm(._.)m - 初心者 (2006年06月12日 17時48分20秒)
- すいません、忙しくて最新のバージョンに全く追いつけていません。折をみて確認しますが、まだ暫くは無理そうです…… - まかまか (2006年06月12日 17時49分14秒)
- レスありがとうございます。お忙しいところ無理を言って申し訳ございませんでした。 - 初心者 (2006年06月13日 06時26分15秒)
- 3.6.0でも同様のエラーが出ました。調べてみたところ、Util::save_config_hashが要素をダブルクォートするようになったのが原因のようです。Core.pmを以下のように修正したら動きました。
sub _store{ my $self = shift; my $wiki = shift; my $data = shift; my $hash = {}; while( my($id,$value) = each %$data ){ my $str = CGI::Session::Serialize::Default::freeze(undef,$value); $hash->{$id} = $str; } my $text = ""; foreach my $key (keys(%$hash)){ $text .= $key."=".$hash->{$key}."\n"; } Util::save_config_text($wiki,$wiki->config('EX_userdat_file'), $text); # Util::save_config_hash($wiki,$wiki->config('EX_userdat_file'), $hash); }
- 深く読まずに修正したので、不具合があったら済みません。 - CatFish (2006年07月25日 17時10分33秒)
- DefaultStrageに作用するため、indexes プラグイン(sakuma氏作)と併用する場合、プラグイン・パッケージ名を「core_user_ex」などに変更する必要がありました。 - A_M (2006年09月29日 23時23分52秒)
- BBS-サポート掲示板/697の回答にもなるかと思います。3.6.2 及び 3.6.3dev1にて、CatFish氏の記述された5行加筆、1行削除で、とりあえずの動作を確認しました。尚、別途、履歴/2005-8-27の変更と同等の修正が必要かも知れません。 - A_M (2007年03月31日 13時23分42秒)
- plugin/user_ex/PageManager.pm に含まれる履歴/2005-8-27の修正を PageManager_pm_3_5_9.txt(1341)として添付しました。内容はページ一覧のフィルタリングをAND,OR,NOTで行う修正です。 - A_M (2007年03月31日 14時59分27秒)
- 参照を編集の可否に変えるならCore.pmの以下の行を書き換えれば良さそう。 - tam (2007年11月27日 16時46分13秒)
31 can_modify_page => 'can_modify_page', 306 sub can_modify_page { 327 if($wiki->is_freeze($page) && (!defined($login) || $login->{type}!=0)){ 330 unless($wiki->can_show($page)){
最終更新時間:2007年11月27日 16時46分13秒