如何在MongoDB / NoSQL中创建用户角色和权限。

6

我已经搜索了一段时间,试图找到关于如何使用用户角色创建典型网站MVC权限系统的教程。

我曾经使用SQL和关系来完成这样的事情,但在nosql数据库中,它是以不同的方式完成的(我假设)。

我想到的是像这样的东西

//Role objects
{Roles : [
{
    '_id' : 'uniqueId',
    'role_name' : 'admin',
    'permissions_granted' : [array of permission strings]
},
{
    '_id' : 'uniqueId',
    'role_name' : 'user',
    'permissions_granted' : [array of permission strings]
},
{
    '_id' : 'uniqueId',
    'role_name' : 'guest',
    'permissions_granted' : [array of permission strings]
}
]}

//User objects
{Users: [
{
    '_id' : 'uniqueId',
    'username' : 'mike',
    'password' : 'mypass',
    'permissions' : [an instance of role group, or its id ? ]
},
{
    '_id' : 'uniqueId',
    'username' : 'jonny',
    'password' : '123',
    'permissions' : [???]
}
]}

如何制作一个查询,可以获取用户数据和其权限? 使用两个查询有什么缺点,一个用于获取用户角色ID,另一个用于从角色文档中获取权限? 在像mongodb这样的nosql数据库中如何处理用户权限?


提醒:MongoDB 是文档和子文档导向的,因此没有“JOIN”的概念,也不应该有这种设计。将角色对象嵌入到每个用户的权限数组中,即“角色组的实例”。 - zamnuts
1个回答

1
你应该使用ID而不是对象本身。这样你可以轻松更新所有内容。如果你有一种情况,经常读取权限但很少写入(我假设),你可以除了角色ID外,还存储用户的实际权限(基于其角色)。
然而,每次更新角色时,你需要更新这些权限。但在查询用户时,你立即获得与之相关的角色,这比进行2个单独的查询要快得多。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接