这是我第一次使用这个宝石,它让我疯狂的只是为资源所有者授权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
有什么想法吗?认真考虑回归康康。
提前致谢。
答案 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过滤器。