为什么使用授权库而不是我的例子会更好?

时间:2012-04-22 17:46:07

标签: ruby-on-rails authorization

我正在为我正在构建的应用添加授权,我有一个问题。我在我的User表中添加了一个:admin列,并将其设置为布尔值。在我的控制器中,我添加了以下代码:

class ShipsController < ApplicationController

  def index
    ships = Ship.all
    @ships = ships.sort_by { |v| [v[:empire_image], v[:cost]] }
    if current_user.admin == true
      respond_to do |format|
        format.html # index.html.erb
        format.json { render json: @ships }
      end
    else
      respond_to do |format|
        format.html { redirect_to root_path }
      end
    end
  end

看起来我必须将此添加到我的所有操作中,这似乎是错误的。我的问题是,这样做是不安全的,还是只为自己做更多工作但很好。

此外,我正在使用来自railstutorial.org的身份验证,并且想知道像cancan这样的库是否能够很好地运行。

谢谢你的时间, 尼克

1 个答案:

答案 0 :(得分:1)

这种方式并不安全,它只是使您的控制器混乱,至少考虑使用before_filter来授权您的操作。

也许对于一个简单的应用程序使用第三方授权宝石似乎有点矫枉过正,但将授权规则移到一个地方是一件非常好的事情(ability.rb文件就是惭惭)。

您可以将CanCan与该身份验证系统一起使用,CanCan只需要在控制器中存在current_user方法。