新增Redmine自定义路由、视图及控制器方法后访问返回403错误
问题原因
你遇到的403错误是Redmine的权限校验机制导致的。Redmine的IssuesController默认配置了:authorize前置过滤器,所有自定义新增的动作如果没有被加入权限白名单、也没有声明对应权限规则,就会被过滤器直接拦截,日志中的Filter chain halted as :authorize rendered or redirected已经明确指向这个问题。
解决方案
按以下步骤操作即可修复:
- 第一步:给自定义动作配置权限规则
打开app/controllers/issues_controller.rb,给新增的edit_realtime动作声明和原生edit动作一致的权限:
# 找到控制器顶部的权限声明代码段,在edit动作的权限配置旁新增edit_realtime # 如果是用authorize_resource配置,修改如下 authorize_resource except: [:index, :show, :edit, :edit_realtime, :update] # 同时显式指定动作对应的权限,和edit复用:edit_issues权限 permission :edit_realtime, { issues: [:edit_realtime] }, require: :member, require: :edit_issues
如果你的版本是用allowed_actions方法声明可用动作,新增如下代码:
def self.allowed_actions super + [:edit_realtime] end
- 第二步:调整路由优先级
确认你在routes.rb中新增的get '/issues/:id/edit_realtime', :to => 'issues#edit_realtime'路由,放在resources :issues配置的前面,避免被Redmine默认的issues路由覆盖。 - 第三步:修正视图目录命名(可选排查点)
你当前的视图放在app/views/issue目录下,Redmine的issues对应视图目录是复数形式app/views/issues,如果目录名错误也会导致后续访问异常,建议核对修正。 - 第四步:重启Redmine服务
修改控制器和路由配置后需要重启服务,让配置生效。
内容的提问来源于stack exchange,提问作者al1ssicone
相关产品推荐
相关产品推荐

