【问题标题】:Unique IDs between Users and Admins with Devise Rails使用 Devise Rails 的用户和管理员之间的唯一 ID
【发布时间】:2012-03-16 01:37:21
【问题描述】:

我已经使用本教程中的选项 1 https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role 安装了设计并创建了用户和管理员

现在我需要一点帮助。添加管理员时,它会创建一个不同的表,并且管理员和普通用户可能具有相同的 ID。

那么,我究竟是如何从用户和管理员那里获取信息的呢?比如说我想显示所有用户?是否必须遍历 users 表,然后是 admins 表?

或者,如果我正在显示帖子。我如何知道要查找哪个表来获取用户或管理员信息?

我知道我可以在 users 表中添加一个角色列,但我想避免这种情况。

我希望这是有道理的哈哈

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    我强烈建议使用单表继承 (STI)。您可以通过在users 表中添加一个名为string 数据类型的名为type 的列来执行STI,并创建一个admin 模型以及一个normal_user 模型,这两个模型都将从user 模型继承devise gem。

    class NormalUser < User
    end
    
    class Admin < User
    end
    

    类型列是一个保留字,根据您创建的用户类型,它将包含一个值NormalUserAdmin

    创建管理员使用Admin.create(...),创建普通用户使用NormalUser.create(...),其中的点是AdminNormalUser的属性

    【讨论】:

    • @mohammed.magdy 太棒了我想这就是我想要的。您能帮我设置正确的身份验证代码吗?我正在尝试使用 Rails_Admin,所以我需要一种方法来验证管理员身份。
    • 当然,在 users 表中,您添加了一个名为 type 的列,它是一个字符串数据类型。 type 列的值将是 Admin 或 NormalUser(在我们这里的例子中)。当用户登录时,您可以通过在 user.rb 中添加一个检查登录用户类型的方法来获取用户的类型。为管理员定义一个名为 admin 的方法?正文将是 self.is_a?(Admin) 如果登录用户是管理员,则返回 true,否则返回 false。 NormalUser 也一样,在 user.rb 文件中添加一个名为 def normal_user 的方法?该方法的主体将是 self.is_a?(NormalUser)。
    • 对于身份验证,我建议使用 cancan gem,但如果角色不多,该设计将在授权和身份验证中为您工作。
    • 非常感谢您的帮助。我已成功创建 STI,并且正在设置授权。
    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多