我正在尝试设置,以便用户点击编辑不属于他们的个人资料时会收到“未授权”消息。此消息当然不会显示给管理员,因为管理员可以编辑所有配置文件。我之前在Permission.rb上做过这个,但是我删除了该文件以使用更基本的用户角色/授权。
我没有看到我如何能够在Permission.rb上实现我以前的文件。我尝试了一些解决方案,但他们没有加起来。如果有人能指出我正确的方向,这将是伟大的。我也是从头开始,用户身份验证/授权。
index.html.erb
<% @users.each do |user| %>
<li>
<% if current_user.admin? || current_user == @user %>
<% end %>
<%= link_to "Edit #{user} profile", user %>
| <%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?"} %>
</li>
<% end %>
答案 0 :(得分:1)
为什么您有机会让用户编辑其他人的个人资料?
首先,您应该在视图中显示if
语句,其中显示编辑页面的链接。我想这会出现在每个用户的个人资料中,所以我想控制器中的代码是这样的:
def show
@user = User.find(params[:id])
end
然后在你看来你应该有这样的东西:
<% if current_user.admin? || current_user == @user %>
<%= link_to 'Edit Profile' , edit_user_path(@user) %>
<% end %>
还有一种情况,如果有人试图“强行”进入,就像尝试输入网址www.yourapplication.com/users/6/edit
一样,您可以在控制器中编写before_filter
方法:
before_filter :check_privileges, only => [:edit, :update]
然后在被调用的check_privileges
def check_privileges
unless current_user.admin? || current_user.id == params[:id]
flash[:warning] = 'not authorized!'
redirect_to root_path
end
end
编辑:在提问者编辑他的代码后,我显示错误:
你过早地放end
:
<% @users.each do |user| %>
<li>
<%= link_to user.name, user %>
<% if current_user.admin? || current_user == @user %>
<%= link_to "Edit #{user} profile", user %>
| <%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?"} %>
<% end %>
</li>
<% end %>