如何使用 3 个或语句编写 Pundit 策略?
How to write a Pundit policy with 3 or statements?
我有一个 Pundit policy 可以正常工作,但我写它的方式似乎不是 "best" 的表达方式。这是一个包含三个 "or" 语句的策略。这是代码:
def update?
user.admin? or user.moderator? || user.id == @artist.user_id
end
还有什么其他的写法?或者这是最好的表达方式?
两种可能的方式:
def update?
user.admin_or_moderator? || user == @artist.user
end
admin_or_moderator?
只是说,它甚至可以是 privileged?
并在您的 User
模型中实现此方法。或者
def update?
%i(admin moderator).include?(user.role) || user == @artist.user
end
我猜你在你的 User
模型中有类似的角色,但这就是想法
顺便说一句,你可以做如下事情:
delegate *%w(admin? moderator?), to: :user
def user_artist?
user == @artist.user
end
def update?
admin? || moderator? || user_artist?
end
我觉得这很干净。
我有一个 Pundit policy 可以正常工作,但我写它的方式似乎不是 "best" 的表达方式。这是一个包含三个 "or" 语句的策略。这是代码:
def update?
user.admin? or user.moderator? || user.id == @artist.user_id
end
还有什么其他的写法?或者这是最好的表达方式?
两种可能的方式:
def update?
user.admin_or_moderator? || user == @artist.user
end
admin_or_moderator?
只是说,它甚至可以是 privileged?
并在您的 User
模型中实现此方法。或者
def update?
%i(admin moderator).include?(user.role) || user == @artist.user
end
我猜你在你的 User
模型中有类似的角色,但这就是想法
顺便说一句,你可以做如下事情:
delegate *%w(admin? moderator?), to: :user
def user_artist?
user == @artist.user
end
def update?
admin? || moderator? || user_artist?
end
我觉得这很干净。