プロジェクト

全般

プロフィール

QA #893

カスタムクエリの定義をPJ階層間で共用したい。

奈良 裕記3ヶ月前に追加. 14日前に更新.

ステータス:
新規
優先度:
通常
担当者:
-
カテゴリ:
-
対象バージョン:
-
開始日:
2018/11/23
期日:
進捗率:

0%

予定工数:

説明

■現象/要望

現在のRedmineでは、カスタムクエリのスコープが、全プロジェクト向け or 自プロジェクトのみの、2階層しかない。

Versionと同様に、プロジェクト階層間で共用可能としたい。
(カスタムクエリを定義したプロジェクトのサブプロジェクトで利用可能、他プロジェクトには見えない)

スコープとして、現行の全プロジェクト向けと自プロジェクトのみに加え、
自プロジェクトとサブプロジェクトを追加できれば良いと考える。
(現在のVersionの共有設定全部は不要)

■理由

大規模Redmine運用環境にて、PJ階層間で共用するカスタムクエリを作成する場合、下記問題点がある

現状

下記作業が必要なため、作業効率が悪く、作業ミスの元となっている。
・プロジェクト毎に同じカスタムクエリを作成。
・カスタムクエリ内容の変更時、各プロジェクトで別々に変更。

機能追加後の作業

親プロジェクトの一か所のカスタムクエリ作成/編集だけで、子プロジェクト側にも自動反映される。(同じカスタムクエリ定義を利用できる)

・親プロジェクトでカスタムクエリを定義する。
・作成したカスタムクエリを、PJ階層間で共用可能の設定にする。

■背景

Redmineのユーザが数百人に上る場合、実質的にはマルチテナントで共用利用するRedmineとなる。(各プロジェクト間、利用者間の関係は希薄になる)
安易にカスタムクエリを全プロジェクトで共有とするわけにはいかない。

・多数のプロジェクトを作成し、プロジェクト内階層構造を作成している場合
 (例:派生製品、地域別管理など)

・組織階層単位・組織内でもプロジェクトを更に分割している場合

■解決策

本家チケット有(チケットのみで未解決)

Allow "Custom queries" to be shared across projects
http://www.redmine.org/issues/23301

■対応状況

■補足


関連するチケット

関連している Unofficial Redmine Cooking - QA #250: Redmineカスタムクエリの公開範囲を指定したい(複数PJ)回答済2016-12-01

関連している Unofficial Redmine Cooking - QA #878: カスタムクエリを別プロジェクトにコピーしたい回答済2018-10-30

履歴

#1 奈良 裕記3ヶ月前に更新

  • 説明 を更新 (diff)

#2 奈良 裕記3ヶ月前に更新

  • 説明 を更新 (diff)

#3 奈良 裕記3ヶ月前に更新

  • 説明 を更新 (diff)

#4 奈良 裕記3ヶ月前に更新

  • 説明 を更新 (diff)

#5 奈良 裕記15日前に更新

  • 説明 を更新 (diff)

#6 奈良 裕記14日前に更新

コード追っかけてみた。

カスタムクエリのサイドバー表示については、下記変更すれば対応できるんじゃないかな。
・self.visible(*args)
・global_or_on_project呼び出し部分

カスタムクエリのサイドバー表示部分

helpers/queries_helper.rb

# Returns the queries that are rendered in the sidebar
  def sidebar_queries(klass, project)
    klass.visible.global_or_on_project(@project).sorted.to_a
  end
# Renders a group of queries
  def query_links(title, queries)
    return '' if queries.empty?
    # links to #index on issues/show

    content_tag('h3', title) + "\n" +
      content_tag('ul',
        queries.collect {|query|
            css = 'query'
            css << ' selected' if query == @query
            content_tag('li', link_to(query.name, url_params.merge(:query_id => query), :class => css))
          }.join("\n").html_safe,
        :class => 'queries'
      ) + "\n" 
  end
# Renders the list of queries for the sidebar
  def render_sidebar_queries(klass, project)
    queries = sidebar_queries(klass, project)
    out = ''.html_safe
    out << query_links(l(:label_my_queries), queries.select(&:is_private?))
    out << query_links(l(:label_query_plural), queries.reject(&:is_private?))
    out
  end
end

models/query.rb

class Query < ActiveRecord::Base
....
  # Scope of queries that are global or on the given project
  scope :global_or_on_project, lambda {|project|
    where(:project_id => (project.nil? ? nil : [nil, project.id]))
  }

def self.visible(*args)
..
    scope = joins("LEFT OUTER JOIN #{Project.table_name} ON #{table_name}.project_id = #{Project.table_name}.id").
      where("#{table_name}.project_id IS NULL OR (#{base})")
..
# Returns true if the query is visible to +user+ or the current user.
def visible?(user=User.current)
..

#7 奈良 裕記14日前に更新

プロジェクトの指定したメンバー/ロール割当ユーザ間でカスタムクエリを共用するプラグイン
all projectsでロールによるアクセス制御を行えば、admin作業無しで運用対処もできそう。

Redmine "Custom Query Share" Plugin
https://github.com/jrupesh/redmine_query_share

The Plugins aims at providing some user specific customization in redmine.

Custom Query can be Private, Shared with users with specific Roles or Public,
The plugin provide another option "to selected users",
This allows selections of Project member users and groups and the query will be accessible only for these members.

#8 奈良 裕記14日前に更新

  • 関連している QA #250: Redmineカスタムクエリの公開範囲を指定したい(複数PJ) を追加

#9 奈良 裕記14日前に更新

  • 関連している QA #878: カスタムクエリを別プロジェクトにコピーしたい を追加

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