2013-03-18 77 views
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 %> 
+0

抱歉,我认为我今天早上做了这件事,但这是另一个问题。感谢您指出。 – pwz2000 2013-03-18 15:13:28

+0

在答案的最后看看我的编辑。你很快就把你的'<% end %>'放了。 – Zippie 2013-03-18 15:21:25

回答

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

最重要的是,我建议看看这本在线书,更具体的这一部分:http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users#sec-authorization – gabrielhilal 2013-03-18 14:42:37

+0

很好的资源! :) – Zippie 2013-03-18 14:44:52

+0

我还没有添加权限部分。但是,如果用户没有登录,你的第一个解决方案似乎只能阻止用户查看/用户页面。如果用户已登录,他仍然可以编辑配置文件,即使它是别人的。我现在设置页面的方式是去/ users并列出所有注册用户。在该页面上,您可以点击用户名,它会带您到/用户/ ID,您可以在其中查看/编辑配置文件(我还没有创建一个仅输出配置文件信息的模板)。因此,它应该做的不是让任何不是所有者的人查看/编辑配置文件。 – pwz2000 2013-03-18 15:11:02