我有一个由Devise生成的用户模型。所以,我之前有过滤authenticate_user。
我使用了STI并创建了另外两个模型UserA<用户,用户B<用户。
用户有一个字段'type',用于确定用户对象是“UserA”还是“UserB”类型。
我有一些控制器,其中我想要特定的过滤器,例如,只能由用户类型'UserA'或UserB看到。所以,我想写一个这样的过滤器:
def authenticate_usera
if current_user.type == 'usera'
return true
else
return false
end
def authenticate_userb
if current_user.type == 'userb'
return true
else
return false
end
问题:
那么,我应该在哪里放置此过滤器代码?而且,我可以在控制器中使用这样的:
before_filter:authenticate_usera
此外,我是否需要使用“require”之类的内容来获取该过滤器?
答案 0 :(得分:0)
在ApplicationController
添加以下功能:
def only_allowed_for(user_type_class)
unless current_user.is_a?(user_type_class)
redirect_to root_path, :notice => 'Access to the page is not allowed'
end
end
在我的测试中,我假设通过STI,当前用户将拥有正确的类。我对此并不完全确定(这可能取决于设计如何创建用户)。但你明白了。
然后,在任何控制器中,您可以编写以下内容:
class PostsController < ApplicationController
before_filter :authenticate_user!
before_filter { |c| c.only_allowed_for(UserA) }
end
正如您所知:您可以编辑允许哪些类访问。 如果不允许访问,这将重定向到root。