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
因此在您授权记录之前您的数据不会持久化,您可以根据数据将。
授权记录
我正在创建和更新对象,我的控制器有:
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
因此在您授权记录之前您的数据不会持久化,您可以根据数据将。
授权记录