是否可以执行多角色检查 - user.has_role?(:admin, :moderator)
...希望对数据库执行一个查询与执行user.has_role?(:admin) && user.has_role?
(:moderator),这显然涉及到DB两次。使用rolify进行多角色检查
https://github.com/EppO/rolify/issues/234
是否可以执行多角色检查 - user.has_role?(:admin, :moderator)
...希望对数据库执行一个查询与执行user.has_role?(:admin) && user.has_role?
(:moderator),这显然涉及到DB两次。使用rolify进行多角色检查
https://github.com/EppO/rolify/issues/234
没有,现在你不能通过这样的选项。
user.has_role?(:admin, :moderator)
如果你想保存自己从执行多个查询,你可以这样做
(user.roles & [:admin, :moderator]).present?
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