【问题标题】:Ruby on rails controller copy does not autorize userRuby on rails 控制器副本不自动用户
【发布时间】:2016-11-15 06:16:30
【问题描述】:

免责声明:我对 ruby​​ 完全陌生..

我复制了 this controller 并命名为 timelog_estimates_controller.rb,将类名更改为 TimelogEstimatesController 创建了不同的路线,但页面显示“403 禁止”

当我使用原始的 TimelogController 时,它工作得非常好。 我想我错过了一些东西。

【问题讨论】:

标签: ruby-on-rails ruby model-view-controller controller redmine


【解决方案1】:

Redmine 使用声明性许可。当您创建新控制器时,权限定义中缺少它及其操作,因此无法访问。

要解决此问题,您需要将新控制器的相关操作包含到权限定义中。 This is the location in lib/redmine.rb 你可能需要修改。为了清楚起见,复制到这里:

  map.project_module :time_tracking do |map|
    map.permission :log_time, {:timelog => [:new, :create]}, :require => :loggedin
    map.permission :view_time_entries, {:timelog => [:index, :report, :show]}, :read => true
    map.permission :edit_time_entries, {:timelog => [:edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member
    map.permission :edit_own_time_entries, {:timelog => [:edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin
    map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member
  end

你应该在这个块中添加这样的东西:

    map.permission :view_time_estimates, {:timelog_estimates => [:index, :report, :show]}, :read => true
    map.permission :edit_time_estimates, {:timelog_estimates => [:edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member
    map.permission :edit_own_time_estimates, {:timelog_estimates => [:edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin

授权通过您的控制器中的此调用进行:

before_filter :authorize_global, :only => [:new, :create, :index, :report]

如果你遵循authorize_global的实现,你会find this

  # Authorize the user for the requested action
  def authorize(ctrl = params[:controller], action = params[:action], global = false)
    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global)
    if allowed
      true
    else
      if @project && @project.archived?
        render_403 :message => :notice_not_authorized_archived_project
      else
        deny_access
      end
    end
  end

render_403 行是您收到错误的原因。

【讨论】:

  • 抱歉我的无知,我不太明白我到底应该做什么\写project_module :time_tracking ?
  • 我已经添加了您可能需要的行。
  • 是的,我已经知道了。我发现最好将单独的插件与复制的控制器一起使用。除非您的回答符合我的问题,但这是一种硬编码方式。无论如何,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
相关资源
最近更新 更多