我有一个简单的Ability.rb设置如下:
if user.role? :super_admin
can :manage, :all
elsif user.role? :registered
can :review, [Card, Deck], :visible => true
end
alias :review => :index, :list, :show, :to
的位置。 Card和Deck表都具有带有布尔选项的可见列。目前,表中的每个对象都有:visible => false
。因此,我期望具有注册角色的用户将无法:review
任何对象,但事实并非如此。控制器级别的限制工作正常(编辑和删除不可访问),但我似乎无法使用条件的哈希来限制资源的查看。有什么想法吗?
编辑:我在两个控制器中有authorize_resource
。使用Ruby 1.9.2,Rails 3.1和CanCan 1.6.7。我正在使用设计1.4.9进行身份验证。 MySQL是数据库。
编辑:
嗯..我想出了一种根据条件限制资源的方法。尽管我在所有控制器中都有authorize_resource(并且它可以限制对方法的访问),但我必须将authorize!
添加到我想限制资源的方法中。例如,要限制条件为:visible => true
的Decks的show动作,我必须添加authorize!
:
def show
@deck = Deck.find(params[:deck_id]
authorize! :review, @deck
end
说实话,我对这个解决方案不满意,因为我没有看到authorize_resource
不起作用的原因。我很乐意看到解释。
答案 0 :(得分:1)
也许你可以看到这个主题: Cancan condition
我和你有同样的问题,我通过那个话题来解决它,
我将authorize_resource
替换为load_and_authorize_resource
答案 1 :(得分:0)
嗯,重启服务器?你的代码对我来说很好。
答案 2 :(得分:0)
你在打电话吗
load_resource_authorize_resource
在您的控制器中就像那样,或者您是否包含要授权的模型?
我发现如果输入类似的内容,我可以复制您的问题:
load_resource_authorize_resource Deck
我认为后者不起作用的原因是因为你要求CanCan任意授权“Deck”,而不是授权控制器动作,这是你真正想做的事情。