1

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

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

我不知道怎么做,但是@user两者user都等于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 的控制器以及授权如何将变量(post)提供给该类。请回答这两个问题:)

4

1 回答 1

0

该类PostPolicy不查询任何内容。

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

于 2014-09-06T00:58:25.970 回答