2014-07-17 79 views
0

我有很多方法是获取有关当前用户信息,如:商店信息 - 轨道

current_user.is_admin? 
    current_user.is_student? 
    current_user.is_teacher? 

这些方法需要评估,如果CURRENT_USER(的has_many:帐户)有一个具有相应角色(学生,管理员等)的帐户。

我可以在数据库中创建一些东西来巩固这一点,但似乎没有必要。

在登录时是否存在定义真或假的导轨方式,然后能够在不查询的情况下引用?换句话说,def is_admin?将在user_session create中被定义为具有真/假值的常量。而且,如果他们是管理员,我再也不用再查询用户帐户来阻止他们。

+0

“cache”and“ca清“是你需要搜索的词。选项的负载。 –

回答

1

你可以只使用会话存储

def role 
    session[:role] ||= 'student' 
end 

def is_admin? 
    role == 'admin'  
end 

但它是如此的渺小,其保存在数据库中是不会伤害和机会是你反正检索从数据库中大多数的用户请求。

+0

我发现会议有点脆弱......并且不安全。但是,你的回答让我看到了文档。我不知道,铁轨只是这个答案。您可以使用active_record_store进行会话并将会话数据存储在数据库中。 Rails也给了我们“rake db:sessions:create”来为这些会话创建表。热狗! – hellion

+0

Cookies的数据已签名,因此没有人可以篡改它。他们可以阅读,但这似乎并不是一个问题。 – makhan

0

Rails对此有一个答案。

步骤1

进入session_store.rb初始化和更改默认:

Rails.application.config.session_store :cookie_store, key: xxxx 

Rails.application.config.session_store :active_record_store, key: xxx 

然后,添加表使用会话数据存储在数据库:

rake db:sessions:create 
+0

这已在rails 4中更改。如果您设置了“secret_key_base”,则Cookie现在会被签名并加密。 Cooke_store显然也更快。所以,在rails 4中,默认的cookie_store似乎是要走的路。 – hellion