如果我在我的应用程序中有两个角色,一个是admin,另一个是用户,现在我想让他们两个都能够访问控制器操作,我应该怎么做?
class FooController < ApplicationController
#before_filter is used here,but how?
def methodA #index or new...
...
end
def methodB #show or edit...
...
end
...
end
有一些由Devise创建的助手:
before_filter :authenticate_admin!
admin_signed_in?
current_admin
admin_session
在这些助手中,“admin”可以更改为“user”。
答案 0 :(得分:4)
如果我理解得很好,你就会有一个设计模型。每个帐户都以某种方式标记为用户或管理员。因此,只要访问者通过身份验证,就可以允许他/她访问控制器的方法。
在您的控制器中,添加
before_filter: authenticate_user!
(如果你的设计模型被称为'用户'),那就足够了。
现在,如果你有两个模型(每个角色一个),你可以试试这个:
before_filter :deny_to_visitors
private
def deny_to_visitors
redirect_to root_path unless user_signed_in? or admin_signed_in?
end
答案 1 :(得分:0)
我想你可能会使用cancan gem。 Devise主要用于身份验证,但cancan可以更好地处理用户权限。
答案 2 :(得分:0)
我不完全确定你在问什么。 methods A & B
控制器是否有动作?如果是这样,Devise生成的助手使用适当的模型名称。例如:
before_filter :authenticate_model_name!
因此,如果您有User model
和Admin model
,则可以同时使用:
before_filter :authenticate_user!, only: [:destroy, etc]
before_filter :authenticate_admin!, only: [:destroy, etc]
答案 3 :(得分:-1)
这个怎么样:使用一个方法,但在该方法中调用第二个方法。
before_filter :methodA
def methodA
#call method B from here
end
def methodB
return true | false or something
end