Cancancan通过能力检查传递物体

时间:2016-02-25 17:11:36

标签: ruby-on-rails cancan user-roles 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

我的问题是,如何在new和create方法上检查此功能,最好不要在我的对象中添加新列。

感谢任何帮助

由于

1 个答案:

答案 0 :(得分:1)

如果您使用的是load_and_authorize_resource,则不应在@room = Room.new方法中执行newload_and_authorize_resource方法适合您。所以我的假设是你要覆盖它正在初始化的那个。

同样适用于RoomsController中的所有其他方法,除非您想要覆盖图像的加载方式(急切加载等)或搜索。