角色作用域在设计签名表单上无法正常工作



我在Rails 7上使用设计和Rolify…

我有一个创建帐户页面,本周早些时候用户注册很好(我正在处理一些垃圾邮件帐户),但我注意到这些垃圾邮件帐户总是选择非admin用户可用的角色,即非admin角色。

但是今天我注意到一个垃圾邮件账户创建了超级管理员的角色,我在想这是怎么可能的,我发现我所有的角色都是可见的。

这也发生在本地以及我部署的站点。

幸运的是,通过设计,用户必须确认他们的帐户才能访问,但不幸的是,实际用户能够选择超级管理员角色,然后有权限做超级管理员的事情,我现在正密切关注它,但这根本不安全!

我的角色。我有:

ADMIN_ROLES = %w[SuperAdmin Admin Moderator Editor]
scope :admin, -> { where(name: ADMIN_ROLES)}
scope :not_admin, -> { where.not(name: ADMIN_ROLES)}

作用域在我的Rails控制台中工作,当我输入Role.adminRole.not_admin时,相应的角色出现。

在我的注册页面上,当我点击角色集合选择下拉菜单时,我的所有角色都会显示出来,尽管在我的表单中应用了范围过滤器:

<%= f.select :role_ids, Role.not_admin.sorted.pluck(:name, :id), 
{ label: "What roles does this user have??", 
}, 
{ multiple: true, id: "select-dancestyle" } %>
<% end %>

我确实对页面进行了更改,以确保我正在编辑正确的表单,我甚至尝试从表单中删除角色并重新添加它们,我还尝试了不同的浏览器,只是为了确保我没有遇到任何奇怪的cookie问题,我仍然得到所有的角色出现。

我真的不知道我错过了什么,为什么not_admin范围不是在我的表单视图上注册。我使用的引导形式的宝石为这种形式,以及!

答案是我标记的属性的顺序,我能够通过切换代码来解决这个问题:

<%= f.select :role_ids, Role.not_admin.sorted.pluck(:name, :id), 
{ label: "What roles does this user have??", 
}, 
{ multiple: true, id: "select-dancestyle" } %>
<% end %>

<%= f.select :role_ids, Role.sorted.not_admin.pluck(:name, :id), 
{ label: "What roles does this user have??", 
}, 
{ multiple: true, id: "select-dancestyle" } %>
<% end %>

最新更新