2014-03-01 48 views

回答

2

没有,现在你不能通过这样的选项。

user.has_role?(:admin, :moderator) 

如果你想保存自己从执行多个查询,你可以这样做

(user.roles & [:admin, :moderator]).present? 
1

rolify有has_any_role?has_all_roles?方法是做到这一点相当可读。 has_any_role?只碰到DB一次,但has_all_roles?看起来像它迭代了调用has_role?的参数,这样就不会完全解决您关于多次击中DB的问题(它在遇到第一个否定结果时停止,这总比没有好)。

它看起来像你对我可以检查,如果用户在一个查询中使用了两种角色:

user.roles.where("name IN (?, ?)", "admin", "moderator").size > 1 

如果用户可能对不同的资源相同的角色那是不行的,但你这个想法。另一个问题是它难以编码您检查的角色数量。你可以通过构造参数列表并使用send来解决这个问题,但它会很糟糕。或者,如果您知道您检查的值是安全的,则可以将它们放在一个阵列中,并执行以下操作:

roles_to_check = ["admin", "moderator"] 
user.roles.where(name: roles_to_check).size >= roles_to_check.size 
相关问题