[英]cancancan manage a relationship Rails
我遇到了cancancan gem for rails的问题
gem 'cancancan', '~> 1.10'
我有四个模型:用户,公司,位置,组
用户:属于公司公司:有很多位置地点:属于公司组:属于位置
在能力模型中,我有这个:
can :manage, Group, :location => {:id => user.company.locations.map{|l| l.id}}
创建新群组时,我被拒绝(没有访问权限)
我正在寻找一种允许用户使用公司位置ID之一创建组的正确方法(注意:如果没有cancancan,则所有工作都与所有ID相关联,依此类推)。
为了确保我完全理解您的问题...
您是否正在寻找一种方法来限制用户根据用户所属公司的位置来管理网上论坛的能力?
can :manage, Group, location_id: user.company.locations.pluck(:id)
这将收集用户公司位置上的所有:id
,并确保用户只能管理该集合中包含:location_id的组。
从功能上讲,这与您所做的相同,但是在两种方面更有效:
它不涉及任何不必要的Ruby逻辑
使用#pluck仅查询位置上的:id
,而不是整个位置及其所有属性
一般而言,每当您在Rails中访问数据库时,最好完全使用ActiveRecord方法。 这将有助于防止您浪费时间查询不必要的额外信息,并消除使用Ruby重组数据的额外开销。
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.