Project

General

Profile

QA #893

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

Added by 奈良 裕記 5 months ago. Updated about 2 months ago.

Status:
新規
Priority:
通常
Assignee:
-
Category:
-
Target version:
-
Start date:
11/23/2018
Due date:
% Done:

0%

Estimated time:

Description

■現象/要望

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

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

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

■理由

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

現状

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

機能追加後の作業

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

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

■背景

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

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

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

■解決策

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

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

PJ単位の設定となるが、Redmine2.4.0で導入された、ロールベースでのカスタムクエリアクセス制御でも対応可能。

ユーザ単位に権限を追加したい場合は、redmine_query_shareプラグインを併用すれば可能。

■対応状況

■補足


Related issues

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

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

Actions

History

#1

Updated by 奈良 裕記 5 months ago

  • Description updated (diff)
#2

Updated by 奈良 裕記 5 months ago

  • Description updated (diff)
#3

Updated by 奈良 裕記 5 months ago

  • Description updated (diff)
#4

Updated by 奈良 裕記 5 months ago

  • Description updated (diff)
#5

Updated by 奈良 裕記 3 months ago

  • Description updated (diff)
#6

Updated by 奈良 裕記 3 months ago

コード追っかけてみた。

カスタムクエリのサイドバー表示については、下記変更すれば対応できるんじゃないかな。
・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

Updated by 奈良 裕記 3 months ago

プロジェクトの指定したメンバー/ロール割当ユーザ間でカスタムクエリを共用するプラグイン
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

Updated by 奈良 裕記 3 months ago

  • Related to QA #250: Redmineカスタムクエリの公開範囲を指定したい(複数PJ) added
#9

Updated by 奈良 裕記 3 months ago

  • Related to QA #878: カスタムクエリを別プロジェクトにコピーしたい added
#10

Updated by 奈良 裕記 about 2 months ago

  • Description updated (diff)

Also available in: Atom PDF