Creating/Deleting 个对象时的 Pundit 用法

Pundit Usage When Creating/Deleting Objects

我正在创建和更新对象,我的控制器有:

def create
    @mymodel = MyModel.create mymodel_params
    authorize @mymodel
end

我需要授权创建,所以我添加了 authorize @mymodel 但肯定应该先添加?问题是我给什么参数 authorize?

我可以

authorize :mymodel

但这似乎不是 Pundit 应该在具有关联策略的控制器中使用的方式。在这里授权的正确方法是什么?如果我在文档中遗漏了它,我们深表歉意。

你会不会:

def create
 @mymodel = MyModel.new
 authorize @mymodel
 @mymodel.update_attributes(mymodel_params)
end

pundit,可以在里面调用模型名,不用实例变量或符号。

例如。帖子

class PostPolicy < ApplicationPolicy

  def create?
    user.admin?
  end

end


class PostsController < ApplicationController
  expose(:post)

  def create
    authorize post
    post.save
    respond_with(post)
  end

 end

application 的专家部分将实际展示它。

正确的做法是这样的:

def create
  @mymodel = MyModel.new(mymodel_params)
  authorize @mymodel
  @mymodel.save
end

这样,您就可以使用在您的@mymodel 实例中设置的属性,例如:

class MyModelPolicy
  def create?
    @record.user == @user
  end
end

因此在您授权记录之前您的数据不会持久化,您可以根据数据

授权记录