在我的Rails应用程序中,我有一项功能,我只想打开使用某个电子邮件登录的用户(我们使用Devise进行用户身份验证)。我有一种方法来检查用户是否current_user.is_privileged?
def is_privileged?
Settings.privileged_users.include?(email)
end
在config/settings/test.yml
中,我将特权用户设置为:
privileged_users: ['chesa@example.com', 'random@example.com']
另一方面,在生产中,我正在考虑使用配置变量,如:
#config/settings.yml
privileged_users: ENV["PRIVILEGED_USERS"]
我的问题是我是否可以在数组中为该变量设置多个值?我正在将我的应用部署到Heroku。
答案 0 :(得分:2)
您可以将数组作为字符串传入,YAML应该正确解析它。
因此,您的设置将保持不变,您的env变量将为:
PRIVILEGED_USERS="['chesa@example.com', 'random@example.com']"
答案 1 :(得分:2)
通常,设置文件应该真正用于真正的静态或配置数据。您确定不希望在您的用户模型上有privileged
标记,只是将此信息存储在数据库中吗?然后,您不必重新部署代码只是为了更改该列表中的人员:
class AddPrivilegedFlagToUsers < ActiveRecord::Migration
def up ; add_column :users, :privileged, :boolean, :default => false ; end
def down ; remove_column :users, :privileged
end
然后你的检查就是:
if current_user.privileged?
# do stuff
end
答案 2 :(得分:0)
最初的问题是env变量是否可以是一个数组。答案是否定的,而不是Heroku,因为https://github.com/railsconfig/rails_config状态涉及heroku部分中的数组: 然而,#34;它不会使用数组。&#34;。我们ended up将多个值存储为字符串并将它们分开。谢谢Rene!
ENV['PRIVILEGED_USERS'] = "one@example.com, two@example.com"
def is_privileged?
Settings.privileged_users.split(',').include?(email)
end