从gem访问current_user

时间:2014-09-06 00:41:01

标签: ruby-on-rails pundit

您可能听说过Pundit。 https://github.com/elabs/pundit基本上,它是授权宝石。

我想知道的是,它如何访问其类中的变量current_user

我不知道如何,但@useruser在某种程度上与current_user

相等
class PostPolicy
  attr_reader :user, :post

  def initialize(user, post)
    @user = user
    @post = post
  end

  def update?
    user.admin? or not post.published?
  end
end

我们在这个类中也有post变量。我们可以通过运行

来访问它
def publish
  @post = Post.find(params[:id])
  authorize @post
end

在行动中。

要安装Pundit,您需要将模块包含在应用程序控制器中:

class ApplicationController < ActionController::Base
    include Pundit
end

但是,我仍然无法看到类如何“查询”current_user的控制器以及authorize如何将变量(post)提供给类。请回答这两个问题:)

1 个答案:

答案 0 :(得分:0)

PostPolicy类不查询任何内容。

authorize方法是一个控制器实例方法,所以它只能调用current_user。您已经传递了它@post,它用它来确定要使用的策略类。然后它创建该类的新实例,通过current_user@post