プロジェクト

全般

プロフィール

QA #723

未完了

多数のPJ(階層/名称)に、メンバー登録+ロール設定を一括設定したい

奈良 裕記 さんが6年以上前に追加. ほぼ3年前に更新.

ステータス:
回答済
優先度:
通常
担当者:
カテゴリ:
-
対象バージョン:
開始日:
2017/10/24
期日:
進捗率:

0%

予定工数:

説明

Redmine Advent Calendar 2017 の13日目です!
#在庫展開ですが、役に立つ人もいると思うので。。

■現象/要望

多数のPJに、メンバー登録+ロール設定を一括設定したい
(PJは類似名称、階層構造で選択)
(PJのアクセス権限継承設定は利用できないものとする。)

1.顧客毎にPJを分割しアクセス制御している。(100PJ)

 新規プラグイン用の管理者ロールを、指定範囲内のPJに追加登録必要になった。
 責任者の承認権限設定、、
 (ACL継承やロール自体の権限追加で対処できない場合の対応作業が大変)

2.部/課/担当者/顧客の階層構造でPJを分割しアクセス制御している。(数百PJ)

 部長の承認権限Roleを配下のPJ全部に追加する指示が出た。

■解決策

RAILS Consoleで実行可能

例1.顧客毎にPJを分割しアクセス制御している。

下記の場合

対象プロジェクト 識別子= redmine_tokyo_  以下全部(命名規則で指定) 
追加対象ロール   名称=unofficial、ロールID=8
追加対象ユーザ   ID=cooking、ユーザID=13

RAILS consoleで下記実行する

bundle exec rails console production

Project.where('identifier like ?', "redmine_tokyo_%").each do |project|

  member = Member.new

  member.project = project
  member.user = User.find_by_login('cooking')
  member.roles = [Role.find_by_name('unofficial')]

  member.save

end   # ループ処理の最後

quit  # RAILS console終了

例2.部/課/担当者/顧客の階層構造でPJを分割しアクセス制御している。

下記の場合

対象プロジェクト 識別子= redmine_tokyo のサブPJ全部(子供/孫、PJ識別子/PJ名称問わず)
追加対象ロール   名称=unofficial、ロールID=8
追加対象ユーザ   ID=cooking、ユーザID=13

RAILS consoleで下記実行する

bundle exec rails console production

target_user=User.find_by_login('cooking')

target_role=Role.find_by_name('unofficial')
# target_role=Role.find(8)  ロール名称が半角英数以外の場合、非ASCIIとしてエラーになるため回避策

parent = Project.find_by_identifier('redmine_tokyo')

projects = Project.where(['? <= lft and rgt <= ?', parent.lft, parent.rgt])

projects.each do |project|

  member = Member.find_or_new(project,target_user)

  if member.id then
    # PJにメンバID定義済→member_roleを追加する。
    # 追加でないと、既存ロールを上書きしてしまう。

    member.member_roles << MemberRole.new(:role => target_role, :inherited_from =>NIL)

  else
    # PJにメンバID定義無→新規メンバID/ロールのエントリを作成したため、PJ/ロールIDの設定のみ行えば良い。

    member.project_id = project.id
    member.roles =[target_role]

  end

  member.save!

end   # ループ処理の最後

quit  # RAILS console終了

■対応状況

Rails Consoleで一応対応可能

未解決:ユーザIDではなく、グループを指定したい場合の対応方法

■補足

参考情報

Create users from script/console
http://www.redmine.org/boards/2/topics/8550

PJ階層構造の入れ子集合利用については、下記とリンク先を参照ください。

https://toot.redmine.jp/@maeda/98944135133111085

Redmineチケットの階層化の実装方法
http://forza.cocolog-nifty.com/blog/2012/05/redmine-0a1e.html

上記の記事を読むと、階層構造は入れ子集合を使うと、ツリー構造をRDBに綺麗にマッピングできるらしい。
issues.lft, rgtは入れ子集合でツリー構造を表現した時、2次元の円の両端の座標を表している。
すると、チケットBの親がチケットAである場合、チケットA.lft<チケットB.lft<チケットB.rgt<チケットA.rgtという関係が成り立つので、このルールを使ってガントチャートを階層化して表示しているわけだ。

■注意点

ロール名称に半角英数以外が含まれる場合は,非ASCIIとしてエラーになる。
find_by_nameではなく、find(ID)を使用することで回避できる。

  # member.roles = [Role.find_by_name('unofficial')]
  member.roles = [Role.find(8)]


関連するチケット 2 (2件未完了0件完了)

関連している Unofficial Redmine Cooking - QA #702: redmineインストール直後のadminパスワードを初期値から変更したい回答済奈良 裕記2017/08/20

操作
関連している Unofficial Redmine Cooking - QA #946: PJ間共用カスタムクエリをadmin以外が作成/編集したい。回答済2019/05/04

操作

奈良 裕記 さんが6年以上前に更新

奈良 裕記 さんが6年以上前に更新

  • 関連している QA #702: redmineインストール直後のadminパスワードを初期値から変更したい を追加

奈良 裕記 さんが6年以上前に更新

奈良 裕記 さんが6年以上前に更新

奈良 裕記 さんが6年以上前に更新

  • 題名多数のPJに、メンバー登録+ロール設定を一括設定したい から 多数のPJ(階層/名称)に、メンバー登録+ロール設定を一括設定したい に変更

奈良 裕記 さんが6年以上前に更新

  • 説明 を更新 (差分)
  • ステータス新規 から 回答済 に変更

PJ階層構造の対応を追記

Thanks to https://toot.redmine.jp/@maeda/98944135133111085

奈良 裕記 さんが6年以上前に更新

奈良 裕記 さんが6年以上前に更新

PJにユーザIDが既に定義されていた場合の処理を修正した。

奈良 裕記 さんが6年以上前に更新

奈良 裕記 さんがほぼ5年前に更新

  • 関連している QA #946: PJ間共用カスタムクエリをadmin以外が作成/編集したい。 を追加

奈良 裕記 さんが4年以上前に更新

奈良 裕記 さんが4年以上前に更新

奈良 裕記 さんがほぼ3年前に更新

他の形式にエクスポート: Atom PDF