3

如果我的应用程序中有两个角色,一个是管理员,另一个是用户,现在我想让他们都能够访问控制器操作,我应该怎么做?

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”。

4

4 回答 4

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
于 2013-05-16T19:01:53.753 回答
0

我想你可能会使用康康宝石。Devise主要用于身份验证,但cancan更好地处理用户权限。

于 2013-05-16T19:16:07.310 回答
0

我不完全确定你在问什么。是methods A & B控制器动作吗?如果是这样,由 Devise 生成的助手使用适当的模型名称。例子:

 before_filter :authenticate_model_name!

所以如果你有一个User modeland Admin model,你可以同时使用:

before_filter :authenticate_user!, only: [:destroy, etc]
before_filter :authenticate_admin!, only: [:destroy, etc]
于 2013-05-16T19:21:10.153 回答
-1

怎么样:使用一种方法,但在该方法内部调用第二种方法。

before_filter :methodA

def methodA  
   #call method B from here
end


def methodB  
   return true | false or something
end
于 2013-05-16T18:44:41.493 回答