2016-02-25 152 views
0

我使用Cancancan设置管理能力。我是这样一个联合体,其中一个房间Cancancan通过能力检查传递一个对象

has_one :group, through: :property

我知道,一个人不能使用通过传递cancancan的对象,但我们可以通过使用哈希检查能力。

#ability.rb 

if user.has_role?(:admin)  
    can :manage, Room, :group => { :id => user.group_id } 
end 

当我加载我的索引,显示,更新,编辑和删除的方法的上述能力检查工作,但是当我加载新的方法或创建方法不起作用。 我知道Cancancan会传递任何条件作为散列,如this,但我不认为它传递了我的散列,因为组是作为关联而不是每个房间对象上的列设置的。

#rooms_controller.rb 

class RoomsController < ApplicationController 
    load_and_authorize_resource 
    def new 
     @room = Room.new 
    end 
end 

我的问题是,我怎么能检查新的这种能力和创建方法,最好不添加新列到我的对象。

任何帮助表示赞赏

感谢

+0

你什么时候设置房间属于哪个组? – Arjan

+0

它通过创建属性进行设置。每组有大约6个物业,每个物业大约有10个房间。 –

回答

0

如果您正在使用load_and_authorize_resource,你不应该在new方法做@room = Room.newload_and_authorize_resource方法为你做。所以我的假设是你覆盖了正在初始化的那个。

除非要重写图像的加载方式(加载等等)或搜索,否则这同样适用于RoomsController中的所有其他方法。

+0

即使'@room = Room.new'被移除,我仍然有同样的问题 –

+0

另外,我应该补充说,你的问题表明你想在新的/创建方法中检查这个能力。但是对于新建/创建'load_and_authorize'部分,只是初始化一个值并将其填充到查询参数中(在创建的情况下)。 B/c你说用户可以管理'房间',他们可以随时创建它们。在这种情况下没有真正的授权(检查组ID)。 –

+0

但它正在检查新的并创建。 –