创建/删除对象时的权威用法

时间:2015-03-14 20:18:23

标签: ruby-on-rails-4 authorization pundit

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

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

我需要授权创建,所以我添加了authorize @mymodel,但这肯定应该是第一个?问题是我提供的参数authorize

我能做到

authorize :mymodel

但似乎这不是Pundit应该在具有相关策略的控制器中使用的方式。在这里授权的正确方法是什么?如果我在文档中错过了,请道歉。

3 个答案:

答案 0 :(得分:0)

你能不能做到:

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

答案 1 :(得分:0)

对于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上的权威部分将显示其实际效果。

答案 2 :(得分:0)

这样做的正确方法是这样的:

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

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

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

因此,在授权记录之前,您的数据不会保留,您可以根据数据 来授权记录。