授权
给你一些观点,你会寻找一些所谓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
您将可以访问@user
和current_user
。重要的是要注意current_user
!= @user
。尽管weezing
的回答很简洁,但它并不验证用户是否拥有授权的;只是用户认证
因此,你有几种规格:
- 你需要知道,如果用户在
- 实际登录你需要确保你的
logged-in
用户有授权编辑配置文件(IE是他们的)
我强烈建议您查看gems
的使用,如CanCanCan
或Pundit
。我会告诉你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。
非常感谢丰富。很有帮助。下次我会使用你建议的宝石之一。 – robb
有时候最好自己写一些东西 - 特别是为了学习的目的:) – weezing