cancancan可以管理关系Rails



我遇到了rails 的cancancan gem问题

gem 'cancancan', '~> 1.10'

我有四个模型:用户,公司,地点,团体

用户:属于公司公司:有许多地点位置:属于公司组:属于位置

在能力模型中,我有这样的:

can :manage, Group, :location => {:id => user.company.locations.map{|l| l.id}}

创建新组时,我被拒绝(无法访问)

我正在寻找允许用户创建一个具有公司位置id的组的正确方法(注意:如果不取消此操作,所有作品和id都是相关的,等等)。

为了确保我完全理解你的问题。。。

您正在寻找一种方法来限制用户根据用户所属公司的位置管理组的能力?

假设我得到了正确的答案,我建议使用#pull:

can :manage, Group, location_id: user.company.locations.pluck(:id)

这会收集用户所在公司位置上的所有:id,并确保用户只能管理该集合中包含:location_id的组。

从功能上讲,这与您所做的相同,但在两个方面更有效:

  1. 它不涉及任何不必要的Ruby逻辑

  2. 使用#pull只查询一个位置上的:id,而不是整个位置其所有属性

一般来说,无论何时在Rails中访问数据库,最好完全使用ActiveRecord方法。这将有助于防止您浪费时间查询不需要的额外信息,并消除使用Ruby重新构建数据的额外开销。

希望能有所帮助!

最新更新