是否有可能进行多角色检查- user.has_role?(:admin, :moderator) ...which希望对数据库执行一次查询,而不是执行user.has_role?(:admin) && user.has_role?(:moderator),这显然涉及到两次访问数据库。
发布于 2014-03-01 08:28:39
不,现在你不能传递这样的选项。
user.has_role?(:admin, :moderator)如果您想避免执行多个查询,可以这样做
(user.roles & [:admin, :moderator]).present?发布于 2014-03-04 08:36:02
rolify提供了has_any_role?和has_all_roles?方法,它们可以很好地实现这一点。has_any_role?只访问数据库一次,但has_all_roles?看起来像是遍历了调用has_role?的参数,所以这并不能完全解决您对多次访问数据库的担忧(当它遇到第一个负结果时,它确实会停止,这总比没有强)。
在我看来,您可以使用以下命令检查用户是否在一个查询中同时拥有两个角色:
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.sizehttps://stackoverflow.com/questions/22108165
复制相似问题