使用Devise / Cancan / Rolify

时间:2012-06-04 14:09:35

标签: ruby-on-rails authentication devise authorization cancan

我正在尝试设置授权/身份验证系统,我感到很困惑,所以我有几个问题:

  1. 在很多教程中,人们建立了用户/角色HABTM关系。 我知道这允许每个用户拥有多个角色,但是如果 你希望每个用户只有一个角色,这是必要的吗?如果我想为“活跃”和“非活动”用户提供选项,那应该是那些 是角色还是别的什么?
  2. 在Cancan wiki中,它表示如果您希望一个用户拥有一个角色,您应该将其设为属性,然后使用“can” :manage,:all if user.role ==“admin”“,但不是那样 危险因为每次“admin”只是一个字符串?做这个 物?有什么更好的方法可以解决这个问题?
  3. 我已尽力阅读所涉及的所有内容的文档,并从本教程开始

    http://railsapps.github.com/tutorial-rails-bootstrap-devise-cancan.html

    虽然我也读过 http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-1/和 tonyamoyal.com/2010/09/29/rails-authentication-with-devise-and-cancan-part-2-restful-resources-for-administrators /

    我真的无法以我想要的方式工作。我该怎么做?

1 个答案:

答案 0 :(得分:8)

<强> 1。您不需要多个角色或角色表

CanCan与您在应用程序中定义角色的方式无关。您可以在用户模型中轻松拥有角色字段。

对于“有效”和“无效”用户,您有两种选择。您可以拥有该状态的字段,或者您可以拥有“非活动”角色并将任何其他角色视为“活动”。这取决于您在“活动”中的含义以及您在应用程序中使用该信息的方式。

<强> 2。将用户的角色存储在字符串中没有任何问题。

角色存储为字符串这一事实并不会降低安全性。但是,您应该使用attr_protected to prevent mass assignment用户角色。

attr_protected :role

这样,用户将无法更新自己的角色。