通过表单更改用户角色

Posted

技术标签:

【中文标题】通过表单更改用户角色【英文标题】:Changing user roles through a form 【发布时间】:2010-12-18 12:11:07 【问题描述】:

我正在尝试创建一个 Rails 表单,允许管理员用户更改分配给其他用户的角色。我创建的表单注册了对用户的更改(例如密码或登录更改),但不注册对用户角色的更改,这是一个单独的模型。

我正在使用 Acl9 进行基于角色的身份验证,它使用一个用户模型、一个角色模型和一个将两者联系起来的 Roles_user 模型。

这是我的表单中的代码:

<h1>Edit User</h1>

<% form_for(@user) do |form| %>
<%= error_messages_for :user %>
Login:                  <%= form.text_field :login %><br />
Password:               <%= form.password_field :password %><br />
Password Confirmation:  <%= form.password_field :password_confirmation %><br />

<% if current_user && current_user.has_role?(:admin) %>
    <%= error_messages_for :roles %>
    <% fields_for :roles do |role| %>
    <%= 
        @roles = Role.find(:all, :order => "name").map |u| [u.name, u.id] 
        role.select(:id, @roles )
    %>
    <% end %>
   <% end %>
  <%= form.submit "Update" %>
<% end %>

<br />

<%= link_to "My Profile", account_path %>
<%= link_to "Logout", user_session_path, :method => :delete, :confirm => "Are you sure you want to logout?" %>

加载页面时我没有收到任何错误,但所选角色没有与用户关联。任何帮助,将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

您可能希望使用嵌套属性,这是 Rails 2.3 中的新功能。以下链接应该可以帮助您入门。

RoR Nested Model Forms Edge Rails Nested Attributes

【讨论】:

当我尝试使用嵌套属性时,我得到一个 SQL 异常:“没有这样的列:users.user_id: SELECT * FROM "users" WHERE ("users".user_id = 12)。”将相关的代码行从“user_form.fields_for”更改为“fields_for”可以解决错误,但会让我回到开始的位置,所选角色未与用户关联。

以上是关于通过表单更改用户角色的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress - 通过检查用户状态从 bbPress 外部更改论坛角色

通过表单授权更改数据库

使用 MEAN + Passport 根据用户角色更改视图

联系表格 7 (CF7) 单选按钮以更改 WordPress 上的用户角色

如何通过上下文更改 Spring Security 角色?

WooCommerce 根据用户角色更改 BACS 订单状态