Rails - 我想允许用户只更改他们的个人资料

时间:2013-04-17 16:20:05

标签: ruby-on-rails

我有以下表格:用户,员工,联系人。员工和联系人belongs_to用户和用户has_one联系人或has_one员工。创建新的联系人或员工时,我让他们的模型创建一个新用户。

我希望联系人(最终用户)能够编辑自己的联系人记录。所以,我有以下链接:

<li><%= link_to "Edit Profile", edit_contact_path(current_user.contact) %></li>

这会显示他们的记录,他们可以编辑它。但是,我不希望他们能够用另一个contacts.id重新键入url并编辑他们的记录。

我尝试了以下内容,但它并没有阻止它们:

<% if current_user.contact = @contact %>
 <%= render 'form' %>
<% end %>

仅供参考 - 我还允许管理员使用以下代码编辑联系人记录:

<% if current_user.admin? %>
  <%= render 'form' %>
<% end %>

进一步解释 - 网址如下:

http://localhost:5000/contacts/4/edit

如果用4代替4,它仍会显示该记录。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

首先,我认为您可能错过=标志。

<% if current_user.contact == @contact %>
 <%= render 'form' %>
<% end %>

其次,在contacts#edit操作上执行类似

的操作
if current_user.contact != @contact
  flash[:error] = "you've been naughty"
 # also its recommended to record such an abuse attempt by logging or something
else
 # do rest here
end

您还可以使用cancan或其他授权gem执行更多操作(例如,如果您只允许特定用户编辑联系人而不仅仅current_user)。