我正在尝试在我的 rails 4 应用程序中实现基于角色的访问系统,并且我希望最终用户(super_admin)能够通过 UI 编辑角色分配。
我已经取得了一些成功,但不禁感到必须有更好的方法(因为我是 Rails 新手)。这是我的代码:
users_roles_controller.rb
# GET /user_roles/new/:id
def new
@roles = Role.all
end
# POST /user_roles/new/:id
def create
populated = params[:roles][:name].reject(&:empty?)
populated.each do |key|
@user.add_role Role.find(key).name
end
redirect_to users_path
end
在我的表单(HAML 和 simple_form)中:
= simple_form_for :roles, :url => create_user_roles_path(@user.id), :method => "post" do |f|
= f.input :name, :collection => @roles, as: :check_boxes
= f.button :submit
我正在努力解决以下问题:
- 由于没有模型,如何验证表单条目?
- 我应该使用强参数吗?如果是,我如何在没有模型的表单上实现
- 我如何创建类似的东西,但已经检查了当前角色?(真正的角色管理)
更新我已经按照评论的建议使用了改革 Gem。这似乎是一个很好的解决方案。然而,我对这个案例的实施有疑问。
让我把它映射出来:我在数据库中有 3 个表:
- 用户
- users_roles(具有 2 个属性的映射表:user_id & role_id {Join Table -> HABTM})
- 角色
我想构建一个表单,其中包含角色模型中的所有值作为复选框。复选框应指示将哪些值输入 users_roles 表(与特定用户相关)。我想要改革做的是验证这个表单的输入。此表单将始终显示角色中的所有值,但可能未选中某些/所有框。
我在我的应用程序中创建了一个表单文件夹,并从以下代码开始:
class UserRoleForm < Reform::Form
property :user__id, on: :user
property :role_id, on: :role
validates :user__id, presence: true
validates :role__id, presence: true
end
我是否朝着正确的方向前进?
谢谢您的帮助。