您可能听说过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的控制器以及authorize如何将变量(post)提供给类。请回答这两个问题:)
答案 0 :(得分:0)
PostPolicy
类不查询任何内容。
authorize
方法是一个控制器实例方法,所以它只能调用current_user
。您已经传递了它@post
,它用它来确定要使用的策略类。然后它创建该类的新实例,通过current_user
和@post
。