Javascript 如何在mongodb中为用户和管理员授予不同的权限
我正在使用sails和MongoDB创建一个应用程序。我需要三个级别的用户Javascript 如何在mongodb中为用户和管理员授予不同的权限,javascript,mongodb,mongoose,sails.js,Javascript,Mongodb,Mongoose,Sails.js,我正在使用sails和MongoDB创建一个应用程序。我需要三个级别的用户 超级管理员 管理员 使用者 我想为每个用户授予不同的权限 超级管理员可以访问整个数据库 管理员可以访问与该字段相关的数据 用户可以访问与用户相关的数据 因此,如何为不同类型的用户使用不同的模式。并限制一个用户访问其他资源 您所描述的内容不可能仅在数据库级别实现 可以创建另一个对数据库具有不同读/写权限的用户。但是,无法创建仅具有查看与其自身相关数据的权限的用户。您需要做的是在应用程序中执行身份验证,以查看用户是否
- 超级管理员
- 管理员
- 使用者
- 超级管理员可以访问整个数据库
- 管理员可以访问与该字段相关的数据
- 用户可以访问与用户相关的数据
因此,如何为不同类型的用户使用不同的模式。并限制一个用户访问其他资源 您所描述的内容不可能仅在数据库级别实现 可以创建另一个对数据库具有不同读/写权限的用户。但是,无法创建仅具有查看与其自身相关数据的权限的用户。您需要做的是在应用程序中执行身份验证,以查看用户是否有权查看所述数据。显然,这对于实现来说是非常具体的,但这类似于执行应用程序检查“用户ABC是数据XYZ的所有者吗?如果是,让他们看到它,如果不是,则显示错误” 我想为每个用户授予不同的权限
- 超级管理员可以访问整个数据库李>
- 管理员可以访问与该字段相关的数据
- 用户可以访问与用户相关的数据
文档。不幸的是,从3.0版开始,还没有任何内置方式在文档/字段级别提供访问控制。Mongo的ACL仅用于收集级别
…因此,如何为不同类型的用户使用不同的模式。和
限制一个用户访问其他资源
由于上述原因,如果“资源”指的是“文档”,那么仅在数据库级别就不可能做到这一点。但是,您仍然可以在应用程序级别(sailJS)上实现类似的功能。
在数据库级别,您所能做的最好的事情就是将该用户文档移动到其他集合。您可以使用createRole()方法创建角色并指定其权限
对于超级管理员:
db.createRole({ role: "SuperAdmin",
privileges: [
{ resource: { db: "myCustomDB", collection: "" }, actions: [ "find", "update", "insert", "remove" ]}
],
roles: []
})
db.createRole({ role: "Admin",
privileges: [
{ resource: { db: "myCustomDB", collection: "AdminCollection" }, actions: [ "find", "update", "insert", "remove" ]},
{ resource: { db: "myCustomDB", collection: "" }, actions: [ "find"]}
],
roles: []
})
db.createRole({ role: "User",
privileges: [
{ resource: { db: "myCustomDB", collection: "UserCollection" }, actions: [ "find", "update", "insert", "remove" ]}
],
roles: []
})
超级管理员可以访问myCustomDB数据库中的所有集合,并执行查找
、更新
、插入
和删除
操作
对于管理员:
db.createRole({ role: "SuperAdmin",
privileges: [
{ resource: { db: "myCustomDB", collection: "" }, actions: [ "find", "update", "insert", "remove" ]}
],
roles: []
})
db.createRole({ role: "Admin",
privileges: [
{ resource: { db: "myCustomDB", collection: "AdminCollection" }, actions: [ "find", "update", "insert", "remove" ]},
{ resource: { db: "myCustomDB", collection: "" }, actions: [ "find"]}
],
roles: []
})
db.createRole({ role: "User",
privileges: [
{ resource: { db: "myCustomDB", collection: "UserCollection" }, actions: [ "find", "update", "insert", "remove" ]}
],
roles: []
})
管理员可以访问自己集合中的所有文档并执行CRUD操作。但是,它们只能以只读方式访问数据库中的任何其他集合
对于用户:
db.createRole({ role: "SuperAdmin",
privileges: [
{ resource: { db: "myCustomDB", collection: "" }, actions: [ "find", "update", "insert", "remove" ]}
],
roles: []
})
db.createRole({ role: "Admin",
privileges: [
{ resource: { db: "myCustomDB", collection: "AdminCollection" }, actions: [ "find", "update", "insert", "remove" ]},
{ resource: { db: "myCustomDB", collection: "" }, actions: [ "find"]}
],
roles: []
})
db.createRole({ role: "User",
privileges: [
{ resource: { db: "myCustomDB", collection: "UserCollection" }, actions: [ "find", "update", "insert", "remove" ]}
],
roles: []
})
注意:如果您使用的是2.4版(或更低版本),则需要将该用户集合移动到其他数据库。MongoDB 2.4(及以下版本)ACL仅用于数据库级别 假设您正在处理数据库名“记录”
在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" }
]
}
)
有关更多信息: