2015-09-28 90 views
1

我试图让用户只有在配置文件属于他们时才显示编辑按钮。目前,他们只允许编辑属于他们的个人资料,但我似乎无法隐藏该按钮。我有这个迄今为止仅显示编辑按钮current_user(Rails 4)

<% if request.original_url == request.base_url + "current_user.id" %> 
    <%= link_to "Edit Profile", edit_user_path(current_user), class: "btn btn-primary btn-xs" %>&nbsp; 
<% end %> 

这就是我试图比较:

request.original_url =>本地主机:3000 /用户/ random_user

request.base_url + “用户/” + current_user.id => localhost:3000/users/current_user

在此先感谢。

回答

3

授权

给你一些观点,你会寻找一些所谓authorization

这是认证不同,因为它与权限交易,而不是确定您的身份。我会在一分钟内了解它如何工作。


解决您的问题,下面是你需要做什么:

<%= link_to "Edit Profile", edit_user_path(current_user), class: "btn btn-primary btn-xs", if user_signed_in? && current_user == @user %> 

我猜您是在一个user#show动作,可以使用下面的代码来调用这个:

#app/controllers/users_controller.rb 
class UsersController < ApplicationController 
    def show 
     @user = User.find params[:id] 
    end 
end 

这意味着,如果你有以下途径:

#config/routes.rb 
resources :users 

您将可以访问@usercurrent_user。重要的是要注意current_user!= @user。尽管weezing的回答很简洁,但它并不验证用户是否拥有授权的;只是用户认证


因此,你有几种规格:

  1. 你需要知道,如果用户在
  2. 实际登录你需要确保你的logged-in用户有授权编辑配置文件(IE是他们的)

我强烈建议您查看gems的使用,如CanCanCanPundit。我会告诉你CanCanCan:

#app/models/ability.rb 
class Ability 
    include CanCan::Ability 

    def initialize(user) 
     user ||= User.new # guest user (not logged in) 
     can :edit, Article, id: user.id 
    end 
end 

#app/views/users/show.html.erb 
<%= link_to "Edit", edit_user_path(@user) if can? :edit, @user %> 

有一个great resource here

+0

非常感谢丰富。很有帮助。下次我会使用你建议的宝石之一。 – robb

+0

有时候最好自己写一些东西 - 特别是为了学习的目的:) – weezing

0

这应该工作(有点简单):

<% if current_user %> 
    <%= link_to "Edit Profile", edit_user_path(current_user), class: "btn btn-primary btn-xs" %> 
<% end %> 
+0

除非我误认为这不是问题所在。这将显示按钮,如果用户登录。正确的答案是什么@RichPeck张贴。 – DickieBoy

+0

当然你是对的 – weezing