首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rolify进行多角色检查

使用rolify进行多角色检查
EN

Stack Overflow用户
提问于 2014-03-01 08:05:39
回答 2查看 750关注 0票数 1

是否有可能进行多角色检查- user.has_role?(:admin, :moderator) ...which希望对数据库执行一次查询,而不是执行user.has_role?(:admin) && user.has_role?(:moderator),这显然涉及到两次访问数据库。

https://github.com/EppO/rolify/issues/234

EN

回答 2

Stack Overflow用户

发布于 2014-03-01 08:28:39

不,现在你不能传递这样的选项。

代码语言:javascript
复制
user.has_role?(:admin, :moderator)

如果您想避免执行多个查询,可以这样做

代码语言:javascript
复制
(user.roles & [:admin, :moderator]).present?
票数 2
EN

Stack Overflow用户

发布于 2014-03-04 08:36:02

rolify提供了has_any_role?has_all_roles?方法,它们可以很好地实现这一点。has_any_role?只访问数据库一次,但has_all_roles?看起来像是遍历了调用has_role?的参数,所以这并不能完全解决您对多次访问数据库的担忧(当它遇到第一个负结果时,它确实会停止,这总比没有强)。

在我看来,您可以使用以下命令检查用户是否在一个查询中同时拥有两个角色:

代码语言:javascript
复制
user.roles.where("name IN (?, ?)", "admin", "moderator").size > 1

如果用户可以在不同的资源上拥有相同的角色,那么这就不起作用了,但是你明白了。另一个问题是它硬编码了你检查的角色的数量。你可以通过构造参数列表和使用send来解决这个问题,但是这样做有点丑陋。或者,如果您知道要检查的值是安全的,则可以将它们放入数组中并执行以下操作:

代码语言:javascript
复制
roles_to_check = ["admin", "moderator"]
user.roles.where(name: roles_to_check).size >= roles_to_check.size
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22108165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档