通过按钮使用户成为管理员用户,而无需在Rails中访问该属性

时间:2012-07-21 18:11:24

标签: ruby-on-rails ruby-on-rails-3 activerecord

根据我的理解,如果我要让我的用户模型中的管理员布尔值列在attr_accessible中,那么会产生安全漏洞。但是,我希望在我的显示页面上有一个链接,允许现有管理员用户向其他用户授予管理员权限。我想知道怎么做这个?我目前在用户显示视图中的代码包括:

  <% if current_user.admin? && @user.admin == false %>
    <%= link_to "Make Administrator", '#', 
    data: { confirm: "Make this user an admin?" }, class: "btn btn-large btn-primary" %>
  <% elsif current_user.admin? && @user.admin%>
    <%= link_to "Remove Administrator", '#', class: "btn btn-large btn-danger" %>
  <% end %>

我不完全确定要放什么而不是'#'? @ user.toggle!(:admin)似乎没有用,所以任何指针都会受到赞赏。提前谢谢!

1 个答案:

答案 0 :(得分:2)

首先,由于这是一个动作,因此它应该是一个按钮,而不是一个链接。

<%= button_to user_path(@user), :method => :put ... %>

控制器代码

def update
 if params[:admin] 
   user.update_attribute(:admin, true)
   redirect_to ...
 end
...
end

或者如果您希望将逻辑保留在模型中

def update
 ...
 if params[:admin]
  @user.make_admin
 end
 ...
end

模型代码

def make_admin
 self.update_column(:admin, true)
end