我有一个用于Padrino应用程序的Ruby代码:
module Filters
def self.authorize_admin
proc { halt(401) unless current_user.admin? }
end
end
App.controllers :secrets do
before :show, &Filters.authorize_admin
# ...
end
当secrets
控制器收到show
路由上的请求时,它将运行authorize_admin
过滤器。
如果我希望此规则适用于每条路线,我可以写一下:
before { instance_eval &Filters.authorize_admin }
我想将其提取到Filters
中的方法,以便我可以写:
before { Filters.only_administrators }
这样做的正确方法是什么?
答案 0 :(得分:1)
我这样做了:
module Filters
def self.authorize_admin
proc { halt(401) unless current_user.admin? }
end
def self.filter(controller, filter)
filter_method = method(filter.to_sym)
controller.instance_eval &(filter_method.call)
end
end
现在你调用它:
Filters.filter(self, :authorize_admin)