Rails使用User模型的单表继承(STI)

时间:2012-01-06 21:35:57

标签: ruby-on-rails ruby-on-rails-3 inheritance single-table-inheritance sti

建立一个小型预订网站。有users(登录并使用该网站的人),guests被分配到roomsusers可以是(是?)guests,但并非所有guests都是users

我最初的倾向是在belongs_to&之间建立has_one / user关系。 guest但也许STI会在这里工作?作为用户和&访客有first_namelast_nameemail等。设置模型是否有意义,例如userguest都从{继承{ {1}}?

我将推出自己的简单身份验证,因此personuserpassword_digest可能只有roles_mask个字段。

有什么建议吗?我只是问,因为在身份验证,授权和安全方面,事情会变得棘手。诸如此类的东西。

欣赏任何想法/提示!

1 个答案:

答案 0 :(得分:0)

这里最简单的方法是按照建议坚持STI。例如,您可以设置单个devise User模型,并使用CanCan应用ACL,并为您的用户定义角色。

CanCan的能力规范将决定哪些资源可以访问,哪些资源不可访问。这里的优点是用户可以是访客,并且根据您设置ACL的方式,可以阻止访客admin访问。

然而,Jesse建议使用两个独立的Devise模型也是一个好主意,因为这可以确保他们的会话是分开的。这样可以更直接地实现,因为您可以相应地设置特定于用户的ACL和特定于访客的ACL。

https://github.com/ryanb/cancan