Rails Authority宝石,有'show'动作的麻烦

时间:2013-12-01 17:34:28

标签: ruby-on-rails authority-gem

这是我第一次使用这个宝石,它让我疯狂的只是为资源所有者授权show动作这么简单。

我尝试了不同的方法,配置控制器映射和操作,但始终获取show的未授权消息,其他操作可以正常工作。

show似乎无法通过ApplicationAuthorizer。

这就是它的配置方式:

class EnterpriseAuthorizer < ApplicationAuthorizer
  # This works
  def self.creatable_by?(user)
    user.is_enterpriser?
  end
  # This doesn't
  def readable_by?(user)
    true # Just for testing
  end 
end

class EnterprisesController < ApplicationController
  authorize_actions_for Enterprise
  def show
   @enterprise = Enterprise.find(params[:id])
     respond_to do |format|
      format.html
      format.json { render json: @enterprise }
     end
 end

我在用户中有include Authority::UserAbilities,在企业模型中有include Authority::Abilities。和用户has_one :enterprise

有什么想法吗?认真考虑回归康康。

提前致谢。

1 个答案:

答案 0 :(得分:0)

Authority有不同的方法来检查权限。对于基于集合的操作(例如new,create,index),使用authorize_actions_for Model

对于基于实例的操作(例如编辑,更新,显示,删除),您必须致电authorize_action_for @instance

将您的代码更改为此代码,它应该可以正常工作。

class EnterprisesController < ApplicationController
  authorize_actions_for Enterprise
  def show
    @enterprise = Enterprise.find(params[:id])
    authorize_action_for @enterprise
    respond_to do |format|
      format.html
      format.json { render json: @enterprise }
    end
  end
end

如果你想要一个不那么混乱的方法来做这个,把

@enterprise = Enterprise.find(params[:id])
authorize_action_for @enterprise

进入每个实例操作调用的before过滤器。