1

这是我第一次使用这个 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

任何想法?认真考虑回滚到康康。

提前致谢。

4

1 回答 1

1

权威有不同的方法来检查权限。对于基于集合的操作(例如新建、创建、索引),您使用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

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

于 2014-02-06T10:30:11.287 回答