Rails 4 - 为某些用户提供管理员权限的安全方式?

时间:2014-11-10 20:14:36

标签: ruby-on-rails ruby security ruby-on-rails-4 authorization

我有一个Rails应用程序,我希望某些用户具有特殊权限super users,例如能够访问可以编辑网站内容的菜单。我不是100%确定我的实现是安全的,还是Rails way。它看起来像这样:

我使用Figaro gem创建了一个环境变量,我存储了原始网站创建者的电子邮件地址:

ENV["site_manager_email"]

据我所知,费加罗的application.yml就像Rails secrets.yml一样。我的用户模型具有site_manager BOOLEAN属性。原始站点管理员应该能够通过将此属性设置为true来添加其他站点管理员。在我的user model我有一个检查用户是否是网站管理员的方法,它看起来像这样:

def is_site_manager?
  self.email.eql?(ENV["site_manager_email"]) || self.site_manager == true
end

在我的观点中,我有内容,只有网站管理员才能看到我使用上述方法:

- if current_user.is_site_manager?
  SUPER SECRET CONTENT THAT ONLY SITE MANAGERS SHOULD SEE

在我的控制器中,我还计划添加一个前置操作过滤器,以便只访问某些操作。

所以我的问题是,这是一种安全的方法吗?如果没有,我应该改变什么?

并且还有更多Rails way来做吗?如果是这样,它看起来如何?

1 个答案:

答案 0 :(得分:2)

您使用什么进行身份验证?设计?

对于管理员,您可以查看基于角色的授权和CanCan: https://github.com/ryanb/cancan

有一个RailsCast将展示如何设置它:

http://railscasts.com/episodes/192-authorization-with-cancan

安装并向用户添加.role列后,您可以在app / models中创建看起来像这样的Ability.rb:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.role? :administrator
      can :manage, :all
    else
      can :read, :all
      can :create, Product
    end
  end
end