トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/106

ページの作成や編集にはユーザ登録が必要です。

ユーザ属性とページ参照権の拡張

  • 投稿者: まかまか
  • カテゴリ: 新規
  • 優先度: 低
  • 状態: 提案
  • 日時: 2004年03月24日 20時13分35秒

 内容

  1. ログインユーザ毎に任意のデータ構造を永続化させられるようにする。
  2. ユーザ属性にグループを追加する。
  3. ページ毎に、ユーザ別・グループ別に参照の可否を設定できるようにする。

実際は上の二番目と三番目のためにつくってみました。

 導入

pluginディレクトリにuser_exディレクトリ一式をいれます。

EX_user.datとEX_showlevel.logをconfigディレクトリ(変更している場合は適宜読み替えてください)に入れ、パーミッションを(CGIから書き込めるように)適切に設定します。EX_user.datはconfig.datにEX_userdat_fileを指定することで変更できます。

管理画面からuser_exプラグインをonにすれば完了です。

 使用方法

管理画面の「グループの設定」から、既に登録されているユーザにグループを割り当ててください。グループIDは半角英数字とアンダーバーが使用できます。adminは特別なグループ名で、拡張参照権が設定されている全てのページの参照が許可されます。

「ページの権限設定」で必要なページの参照可能ユーザ、グループを設定してください。ユーザ、グループ共に一つのページに複数設定できます。

ページに設定した参照可能ユーザ、グループ指定は、それぞれ一括して削除できます。

管理者の場合は、編集画面にそのページに対して拡張参照権を設定できるフォームが現れます。

 参照の可否判定の流れ

そのページに……

  1. 拡張参照権が設定されていない場合→通常のcan_showによる判定
  2. (ユーザ、グループを問わず)何らかの拡張参照権が設定されている場合
    1. ログインしていない→不許可
    2. ログインしている
      1. userタイプが「管理者」→許可
      2. user idがそのページで参照可になっている→許可
      3. group idがadmin→許可
      4. group idがそのページで参照可になっている→許可
      5. どれにも該当しない→不許可

 メソッド

グループ設定や拡張参照権の設定機能を利用するにあたって、これらのメソッドを理解する必要はありません。ユーザ毎に任意のデータ構造をもたせるプラグインをつくる場合は、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)){
お名前: コメント:
PageManager_pm_3_5_9.txt user_ex-001.tar.gz

最終更新時間:2007年11月27日 16時46分13秒