拒绝未经授权的用户编辑个人资料

时间:2013-03-18 14:06:31

标签: ruby-on-rails

我正在尝试设置,以便用户点击编辑不属于他们的个人资料时会收到“未授权”消息。此消息当然不会显示给管理员,因为管理员可以编辑所有配置文件。我之前在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 %>

1 个答案:

答案 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 %>