【问题标题】:What is a good way to define user roles in a mongo database在 mongo 数据库中定义用户角色的好方法是什么
【发布时间】:2015-01-22 09:51:07
【问题描述】:

来自关系数据库背景,我发现将用户及其角色分解为规范化表很容易。但是在 mongo 数据库中执行此操作的习惯方法是什么?

我的场景

({    "roles" :
    [
        {"role": "user"},
        {"role": "manager"},
        {"role": "admin"}
    ]

    "privileges" :
    [
        {"privilege": "READ"},
        {"privilege": "READ/WRITE"},
        {"privilege": "ALL"}
    ] 

    "users" :
    [
        {"user": "Sammy"},
        {"user": "Tom"},
        {"user": "Fred"},
        {"user": "Zack"}
    ]

    "userPermissions" :
    [
        {"admin": "Sammy"},
        {"manager": "Tom"},
        {"user": "Fred"},
        {"user": "Zack"}
    ]
})

问题:这是在 Mongo 中为用户角色建模的合适方法吗?

【问题讨论】:

  • 这甚至是有效的 JSON 吗?
  • 以前不是,现在也不是。现在我看不到用户的角色。
  • 这样更好。现在在所有东西周围添加一个根对象({ }),你就有了有效的 JSON :)
  • @LutzHorn 非常感谢。 JSON 不是我关心的问题,即使我把它宰了 :) 但这是 mongo 的合适方法吗?这通常是 mongo 开发人员如何将用户角色分解到数据库中吗?

标签: java mongodb user-roles


【解决方案1】:

如果您的角色是纯字符串或原始元组,您可以将它们作为array 存储在每个用户的文档中。如果角色是复杂实体,您可以将它们存储为 doc-refs 数组。

更新:

这是我的userAccount 集合中的一个文档,由Spring Security Core Grails plugin 生成:

{
  "_id" : "541fdfdebaacef69047415a8",
  "authorities" : [ 
     {
        "authority" : "ROLE_USER"
     },
     {
        "authority" : "ROLE_ADMIN"
     }
  ],
  "password" : "lakdjalksdj87a68sd76as87d6a87sd6",
  "username" : "someusername",
  "version" : NumberLong(1)
}

Spring Security 及其后代是 java 中的标准安全实现,所以...

【讨论】:

  • 那么这个“权威”与哪里有联系。以及我将如何弄清楚其他选项是什么?
  • authorities 映射到UserAccount 域类的同名属性,它表示Authority 类的数组
【解决方案2】:

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 2014-05-13
    • 2011-12-18
    • 2023-03-25
    • 1970-01-01
    • 2015-03-20
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多