我有一个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
来做吗?如果是这样,它看起来如何?
答案 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