【发布时间】:2017-08-15 06:33:34
【问题描述】:
我花了四天时间尝试实现此角色验证,但没有成功,我不知道目前是否有任何方法可以使用 rolify 执行此行为。这是我遇到的情况的一个简单示例:
假设我有 3 种类型的角色:
- 管理员
- 开发者
- 客人
用户既可以是管理员也可以是开发人员,但不能同时是访客。
来宾既不能是管理员也不能是开发人员。
我希望用户能够在用户注册时设置他们的角色,所以我需要在创建用户之前验证此行为,如果它无效,则注册应该失败并且不应创建用户。
我已经阅读了很多试图达到类似结果的指南,至少对于表单提交而言,但没有关于这种类型的验证的解释。
提前致谢!
更新: 我一直在寻找一些方法来实现这一点,这就是我在这段挣扎中的思路。
首先:接收选择的角色作为输入,并在与该角色对应的用户模型中创建一个虚拟属性,以便参数看起来像这样(简化)
:params => { :user => {:email, :password, :roles => ["admin", "developer", "guest"]}}
如果所有角色都被选中,并且
:params => { :user => {:email, :password}}
如果没有选择任何角色。
第二:用这个虚拟属性做任何类型的验证(简化)
Class User < ApplicationRecord
attr_accessor :roles
validate :roles_valid
def roles_valid
# Define custom validation
end
end
第三:如果记录通过所有验证,创建用户,然后在registrations#new操作中分配角色
我认为这种方法可行,但我现在对虚拟属性有一些问题,而且它似乎与从表单接收的角色参数无关。我想我仍然不明白虚拟属性是如何工作的,所以我希望有人能帮我弄清楚这一点。
【问题讨论】:
-
您如何知道用户在尝试注册时是否无效?
-
@chumakoff 我需要的是模型内部的某种用户验证,这将能够检查通过表单发送的角色是否是一组有效的角色,以及验证是否失败,回滚并向用户显示错误。理想的情况是在 User 模型中进行这种验证,但我还没有找到一种方法来验证旨在转到另一个模型(在本例中为角色模型)的参数。
标签: ruby-on-rails forms validation devise rolify