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]