代码之家  ›  专栏  ›  技术社区  ›  Nikage

Ruby on rails控制器副本不会自动用户

  •  -1
  • Nikage  · 技术社区  · 8 年前

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

    我已经抄了 this controller 使用名称 timelog_estimates_controller.rb ,已将类名更改为 TimelogEstimatesController

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   Nic Nilov    8 年前

    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 行是您得到错误的原因。