2013-03-24 24 views
0

我试图保护某些操作不被未经授权的用户访问。我应该从在过滤器中调用的助手方法返回什么?

这里从我的控制器的一个小例子:

class RestaurantsController < ApplicationController 
    before_filter :require_admin, :only => [:new, :create, :update, :edit, :destroy] 

    #...yada yada yada... 
end 

而且在我的ApplicationController(因为我需要保护在许多控制器那些相同的动作)我把辅助方法,所以我不重复自己。

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    private 
    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    def require_admin 
    ??? 
    end 
    helper_method :current_user 
end 

我应该从我require_admin方法,以便返回:

  1. 防止流如果current_user不是管理员。
  2. 如果current_user是管理员,允许定期流动。

此外,我是否需要将require_admin作为helper_method

我知道如何处理is admin?位,我只需要知道从我的过滤器调用的帮助器方法返回什么。

有什么建议吗?

回答

1

我喜欢,如果有人试图访问一个网页,他们无权要查看筹集404错误。

def require_admin! 
    raise ActiveRecord::RecordNotFound unless authenticate_user! && current_user.is_admin? 
    end 

上面假设您有一个authenticate_user!如果您使用设计,您将拥有这种方法。如果你不使用设计,我会创建一个类似于我上面显示的require admin,除非current_user条件。

添加is_admin?方法到您的用户/管理员类

所有控制器都从应用程序控制器继承,因此您不需要使其成为辅助方法。

相关问题