0

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

1 回答 1

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

还有一种情况是,如果有人试图“强行”进入,就像尝试输入 url 一样,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 %>
于 2013-03-18T14:16:00.840 回答