ruby-on-rails - 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
被使用了。
我是否必须让我的补丁模块稍后加载,以便加载用户(这怎么可能以及如何做到这一点)还是有窍门?
解决方案
它可以通过使用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
中的权限在哪里。
推荐阅读
- javascript - 从需要登录的网站上抓取数据
- vue.js - 我试图在 v-bind:max 中使用变量设置默认值
- php - 如何检查用户是否通过 facebook 或网站登录系统登录
- tensorflow - 如何使用 Ubuntu 20.04 64 位在 VirtualBox 6.1.16 中启用 AVX/AVX2?
- rust - 如何计算向量与自身 N 次的笛卡尔积?
- sql - 在新列中显示行数据(透视?)
- google-apps-script - 使用 Apps 脚本将文件从一个文件夹复制到云端硬盘上的另一个文件夹
- python - pipenv 的问题
- javascript - Typescript 来自另一个 const 数组的项目数组(来自官方初学者教程)
- python - 游戏 | 每次我尝试运行它时它都会显示一个黑屏然后崩溃,即使它以前工作过