我的lib目录中有一个自定义模块,我在我的应用程序控制器中加载。我开始使用cancan,现在我的自定义模块中的所有操作都出现了Access Denied错误。我不希望cancan检查我的自定义模块的授权。解决这个问题的一种方法是使用except => [:action_name_in_my_custom_module]
,但我在许多地方的应用程序中使用了很多操作。我需要更好的解决方案。
答案 0 :(得分:0)
假设您有一个控制器操作模块,并且您将其包含在控制器中,是否有理由没有将它们全部放在ApplicationController
中?
您可以尝试的一件事是在模块中使用skip_before_filter
。这将在包含MyModule的任何类上调用该方法:
module MyModule
def self.included(klass)
klass.class_eval <<-filters
skip_before_filter :filter_method_to_skip, only: [:method_a, :method_b, ...]
filters
end
end
class MyController < ApplicationController
before_filter :filter_method
include MyModule
end
我认为在定义过滤器之前需要将包括在内。