Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用两个designe';在一个rails控制器中过滤之前的?_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 如何使用两个designe';在一个rails控制器中过滤之前的?

Ruby on rails 如何使用两个designe';在一个rails控制器中过滤之前的?,ruby-on-rails,devise,Ruby On Rails,Devise,如果我的应用程序中有两个角色,一个是管理员,另一个是用户,现在我想让这两个角色都能够访问控制器操作,我应该如何做到这一点 class FooController < ApplicationController #before_filter is used here,but how? def methodA #index or new... ... end def methodB #show or edit... ... end

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

class FooController < ApplicationController
  #before_filter is used here,but how?
  def methodA     #index  or new...
    ...
  end
  def methodB     #show  or  edit...
    ...
  end
  ...
end 

在这些帮助程序中,“admin”可以改为“user”。

这样如何:使用一个方法,但在该方法中调用第二个方法

before_filter :methodA

def methodA  
   #call method B from here
end


def methodB  
   return true | false or something
end

如果我理解的很好,你有一个设计模型。每个帐户都(以某种方式)标记为用户或管理员。因此,只要访问者经过身份验证,他/她就可以访问控制器的方法

在控制器中,添加
在\u过滤器之前:验证\u用户
(如果您的Desive模型被称为“用户”),这就足够了

现在,如果您有两个模型(每个角色一个),您可以尝试以下方法:

before_filter :deny_to_visitors

private

def deny_to_visitors
  redirect_to root_path unless user_signed_in? or admin_signed_in?
end

我想你可以用gem。Deviate主要用于身份验证,但cancan更适合处理用户权限。

我不完全确定你在问什么。
方法A和B是否为控制器动作?如果是这样,Desive生成的助手将使用适当的模型名称。例如:

 before_filter :authenticate_model_name!
因此,如果您有一个
用户模型
管理员模型
,那么您可以同时使用这两种模型:

before_filter :authenticate_user!, only: [:destroy, etc]
before_filter :authenticate_admin!, only: [:destroy, etc]

在筛选之前:必须是管理员或用户,:only=>[:methodA,:methodB]
。然后定义一个方法,如果用户属于这些角色中的任何一个,该方法将返回true。@kiddorails:不要认为这会起作用,因为“:only”选项仅用于跳过操作而不是方法的筛选,这会起作用。无论何时要求控制器调用这些操作,都将由
必须是\u admin\u或\u user
@kiddorails谢谢!行得通。你的方式给了我正确的思考方向。这太荒谬了。你认为它们是方法;互相打电话?为什么?@xwyy正在询问如何满足这两个角色(条件)中的一个在这些控制器中的作用。阅读关于我不会浪费时间与@kiddo争论的文章。文档说明了我上面写的内容。您试图调用两个方法,而不是来自筛选器之前的两个操作:我不确定这是否有效,因为这两个条件不能同时为真听起来您可能需要权限。看看我说的是,这将需要用户以用户和管理员的身份登录。我真的不知道这和cancan有什么联系?没错!我想知道为什么会有这么多的困惑?我在第一条评论中要求@xwy也这么做。谢谢!你的方法美丽而有力!
before_filter :authenticate_user!, only: [:destroy, etc]
before_filter :authenticate_admin!, only: [:destroy, etc]