Ruby on rails 可以通过能力检查传递对象
我正在使用Cancancan设置管理功能。我有一个协会,那里有一个房间Ruby on rails 可以通过能力检查传递对象,ruby-on-rails,cancan,user-roles,cancancan,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 当我加载我的索引、显示、更新、编辑和销毁方法时,上面的能力检查有效,
has_one:group,through::property
我知道不能使用cancancan传递对象,但我们可以使用散列来检查能力
#ability.rb
if user.has_role?(:admin)
can :manage, Room, :group => { :id => user.group_id }
end
当我加载我的索引、显示、更新、编辑和销毁方法时,上面的能力检查有效,但当我加载新方法或创建方法时不起作用。
我知道Cancancan会以散列的形式传递任何条件,但我认为它不会传递我的散列,因为组被设置为一个关联,而不是每个房间对象上的一列
#rooms_controller.rb
class RoomsController < ApplicationController
load_and_authorize_resource
def new
@room = Room.new
end
end
#rooms_controller.rb
类RoomsController<应用程序控制器
加载和授权资源
def新
@房间
结束
结束
我的问题是,我如何在新方法和创建方法上检查这种能力,最好不向对象添加新列
谢谢你的帮助
谢谢如果您正在使用
加载和授权资源
,您不应该在新建方法中执行@room=room.new
。load\u和\u authorize\u资源
方法为您完成这一任务。所以我的假设是你正在覆盖它初始化的那个
这同样适用于RoomsController
中的所有其他方法,除非您希望覆盖图像的加载方式(快速加载等)或搜索方式。何时设置房间所属的组?它是通过创建时的属性设置的。每个组大约有6个属性,每个属性大约有10个房间。即使删除了@room=room.new
,我仍然有相同的问题。因此,我应该补充一点,您的问题表明您希望在新建/创建方法中检查此功能。但是对于新建/创建,load_and_authorize
部分只是初始化一个值并使用查询参数填充它(在创建的情况下)。B/c您说过用户可以管理房间
,他们总是可以创建房间。在这个场景中没有真正的授权(检查组id)。但是它在新建和创建时检查它。当我有can:manage,Room,:group=>{:id=>user.group\u id}
时,它失败了,但当我只有can:manage,Room
时,它通过了检查。但仅限于新建和新建