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?位,我只需要知道从我的过滤器调用的辅助方法返回什么。

有什么建议么?

4

1 回答 1

1

如果有人试图访问他们无权查看的页面,我更愿意引发 404 错误。

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

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

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

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

于 2013-03-24T03:32:06.510 回答