如何为mongodb中的用户和管理员赋予不同的权限

时间:2015-06-19 05:40:24

标签: javascript mongodb mongoose sails.js

我正在使用sails和MongoDB创建一个应用程序。我需要三级用户的地方。

  • 超级管理员
  • admin
  • 用户

我想为每个用户提供不同的权限

  • 超级管理员可以访问整个数据库。
  • 管理员可以访问与该字段相关的数据
  • 用户可以访问与用户相关的数据。

所以如何为不同类型的用户使用不同的架构。并限制一个用户访问其他资源。

3 个答案:

答案 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数据库中的所有集合并执行findupdateinsertremove操作

对于管理员:

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" }
    ]
  }
 )

欲了解更多信息:

Mongo tutorial create admin

Add user to mongo

答案 2 :(得分:1)

您所描述的内容无法在数据库级别实现。

可以创建另一个对数据库具有不同读/写权限的用户。但是,无法创建仅具有查看与其自身相关的数据的权限的用户。您需要做的是在应用程序中执行身份验证,以查看用户是否有权查看所述数据。显然这对于​​实现非常具体,但它类似于执行应用程序检查"用户ABC是数据XYZ的所有者?如果是的话,让他们看看,如果没有,错误"。