我有以下表格:用户,员工,联系人。员工和联系人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,它仍会显示该记录。
感谢您的帮助!
答案 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
)。