0

目前在我的项目中,我有一种方法可以检查用户的 id 是否为“1”,他是否可以访问某些操作。我已经使用设计 gem 进行身份验证。

这是我的代码参考

before_filter :find_xxx, :only => [:edit, :update, :destroy, :create, :new]

这是代码

  protected    
def find_xxx
  if user_signed_in? && current_user.id != 1
      redirect_to "/", :notice => "Not today"
  end
end

我查看了 Rails 官方文档,他们以类似的方式处理它。我想知道这是保护我的操作的安全方法吗,难道不能有人用 /post 将表单添加到我的 html 中,以执行操作。

保护我的方法的最佳方法是什么。

感谢您的时间和考虑。提前感谢您的帮助。

4

1 回答 1

2

假设您的 Devise 身份验证工作正常,例如current_user经过身份验证,任何人都无法通过在提交表单之前操纵表单来偷偷通过身份验证。

但是,您需要反转过滤器中的逻辑,因为就目前而言,用户只需不登录就可以绕过重定向(因为user_signed_in?will be false)。如果您有另一个过滤器或身份验证要求强制他们在访问控制器中的任何操作之前登录,那可能就足够了。

为了安全起见,我将条件更改为:

unless user_signed_in? && current_user.id == 1

请注意,像这样依赖特定的数据库 ID 通常不是一个好主意。你最好创建一个管理员角色和/或使用像CanCan这样的 gem来创建更明确的安全性。

你应该总是围绕这样的事情编写测试以确保安全。

于 2013-03-13T03:18:36.967 回答