Mat*_*ski 4 ruby ruby-on-rails pundit
在我的一个项目中,我开始使用 pundit gem,并且我有一个非常简单的策略,如下所示:
class CompanyPolicy < ApplicationPolicy
def index?
true if user.is_a? Administrator
end
def new?
true if user.is_a? Administrator
end
def create?
new?
end
def edit?
true if user.is_a? Administrator
end
def update?
edit?
end
end
Run Code Online (Sandbox Code Playgroud)
问题是我怎样才能避免重复这样的事情:
true if user.is_a? Administrator
Run Code Online (Sandbox Code Playgroud)
我做的伎俩看起来像这样:
class ApplicationPolicy
private
def self.permit_owner_to(*actions)
actions.each do |action|
define_method("#{action}?") do
owner?
end
end
end
def owner?
# owner logic
end
end
Run Code Online (Sandbox Code Playgroud)
并在其他政策中使用它
class ItemPolicy < ApplicationPolicy
permit_owner_to :show, :update, :destroy, :confirm
end
Run Code Online (Sandbox Code Playgroud)