首页 > 解决方案 > Redmine 根据条件添加新的 QueryColumn

问题描述

我所拥有的是问题列表中的一个新列,效果很好。

初始化.rb

require 'redmine'

Redmine::Plugin.register :test do
   # ...
end

Issue.include IssuePatch
IssueQuery.include IssueQueryPatch

issue_query_patch.rb

module IssueQueryPatch
  def self.included(base)    
    base.class_eval do

      # TODO : add restriction
      self.available_columns << QueryColumn.new(
                                  :calcul_something,
                                  :caption => :Something
                                ))
      end
  end
end

issue_patch.rb require_dependency '问题'

module IssuePatch
  def self.included(base)
    def calcul_something
      return some_data
    end
  end
end

我面临的问题是我希望只有一些用户(例如管理员)能够看到init.rb中的新列但是当前用户尚未加载并且是匿名的,因此我无法检查其状态。

在官方的Redmine Github中,你可以看到它User.current被使用了。

我是否必须让我的补丁模块稍后加载,以便加载用户(这怎么可能以及如何做到这一点)还是有窍门?

标签: ruby-on-railsrubyredmineredmine-plugins

解决方案


它可以通过使用before_*回调来完成before_validation参见 ActiveRecord::Callbacks)。

喜欢:我所拥有的是问题列表中的一个新列,效果很好。

issue_query_patch.rb

require_dependency 'issue_query'

module IssueQueryPatch
  def self.included(base)
    base.class_eval do
      before_validation :display_test

      def display_test
        if User.current.admin? || User.current.allowed_to?(:view_test, nil, :global => true)
          self.available_columns << QueryColumn.new(
                              :calcul_something,
                              :caption => :Something
                            ))
        end
      end
    end
  end
end

init.rbview_test中的权限在哪里。


推荐阅读