Redmine добавляет новый столбец запроса при условии

#ruby-on-rails #ruby #redmine #redmine-plugins

#ruby-on-rails #ruby #redmine #redmine-плагины

Вопрос:

У меня есть новый столбец в списке проблем, который работает очень хорошо.

init.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 используется.

Должен ли я создавать свои модули исправлений для последующей загрузки, чтобы пользователь был загружен (как это вообще возможно и как это сделать) или есть хитрость?

Ответ №1:

Это можно сделать с помощью 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
  

Где view_test находится разрешение в init.rb.