我正在创建和更新对象,我的控制器有:
def create
@mymodel = MyModel.create mymodel_params
authorize @mymodel
end
我需要授权创建,所以我添加了authorize @mymodel
,但这肯定应该是第一个?问题是我提供的参数authorize
?
我能做到
authorize :mymodel
但似乎这不是Pundit应该在具有相关策略的控制器中使用的方式。在这里授权的正确方法是什么?如果我在文档中错过了,请道歉。
答案 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
因此,在授权记录之前,您的数据不会保留,您可以根据数据 来授权记录。