我正在使用sails和MongoDB创建一个应用程序。我需要三级用户的地方。
我想为每个用户提供不同的权限
所以如何为不同类型的用户使用不同的架构。并限制一个用户访问其他资源。
答案 0 :(得分:6)
我想为每个用户提供不同的权限
- 超级管理员可以访问整个数据库。
- 管理员可以访问与该字段相关的数据
- 用户可以访问与用户相关的数据。
您需要的主要是文档级访问控制,用户可以根据特定字段中的值访问document
。遗憾的是,从版本3.0开始,还没有任何内置方法可以在文档/字段级别提供访问控制。 Mongo的ACL仅转到集合级别。
..那么如何为不同类型的用户使用不同的架构。和 限制一个用户访问其他资源。
由于上面提到的原因,如果“资源”是指“文档”,那么仅在数据库级别这是不可能的。但是,您仍然可以设法在应用程序级别(sailJS)上实现类似的功能。 在数据库级别,您可以做的最好的事情是将用户文档移动到不同的集合。您可以使用createRole()方法创建角色并指定其特权。
对于SuperAdmins:
db.createRole({ role: "SuperAdmin",
privileges: [
{ resource: { db: "myCustomDB", collection: "" }, actions: [ "find", "update", "insert", "remove" ]}
],
roles: []
})
SuperAdmins可以访问myCustomDB数据库中的所有集合并执行find
,update
,insert
和remove
操作
对于管理员:
db.createRole({ role: "Admin",
privileges: [
{ resource: { db: "myCustomDB", collection: "AdminCollection" }, actions: [ "find", "update", "insert", "remove" ]},
{ resource: { db: "myCustomDB", collection: "" }, actions: [ "find"]}
],
roles: []
})
管理员可以访问自己集合中的所有文档并执行CRUD操作。但是,它们只具有对数据库中任何其他集合的只读访问权限。
对于用户:
db.createRole({ role: "User",
privileges: [
{ resource: { db: "myCustomDB", collection: "UserCollection" }, actions: [ "find", "update", "insert", "remove" ]}
],
roles: []
})
注意:如果您使用的是版本2.4(或更低版本),则需要将该用户集合移动到其他数据库。 MongoDB 2.4(及以下)ACL仅转到数据库级。
答案 1 :(得分:2)
假设您正在处理数据库名称“records”
在mongo shell中>>
//SuperADMIN
use admin
db.createUser(
{
user: "superuser",
pwd: "12345678",
roles: [ "root" ]
}
)
//ADMIN
use records
db.createUser
(
{
user: "recordsUserAdmin",
pwd: "password",
roles: [ { role: "userAdmin", db: "records" } ]
}
)
//Any User
use records
db.createUser(
{
user: "recordUser",
pwd: "12345678",
roles: [
{ role: "read", db: "records" },
{ role: "read", db: "user" },
{ role: "read", db: "sales" },
{ role: "readWrite", db: "accounts" }
]
}
)
欲了解更多信息:
答案 2 :(得分:1)
您所描述的内容无法在数据库级别实现。
可以创建另一个对数据库具有不同读/写权限的用户。但是,无法创建仅具有查看与其自身相关的数据的权限的用户。您需要做的是在应用程序中执行身份验证,以查看用户是否有权查看所述数据。显然这对于实现非常具体,但它类似于执行应用程序检查"用户ABC是数据XYZ的所有者?如果是的话,让他们看看,如果没有,错误"。