免责声明:我对红宝石完全不熟悉..
我已经用名称timelog_estimates_controller.rb复制了这个控制器,将类名更改为TimelogEstimatesController创建了不同的路由但是……
Redmine使用声明性许可。创建新控制器时,它及其操作在权限定义中缺失,因此无法访问。
要解决这个问题,您需要将新控制器的相关操作包含在权限定义中。 这是在的位置 lib/redmine.rb 你可能需要修改。复制到此为清晰起见:
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 实施,你会的 找到这个 :
authorize_global
# 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 line是你得到错误的原因。
render_403