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

Vis*_*hra 2 javascript mongoose mongodb sails.js

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

  • 超级管理员
  • 管理
  • 用户

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

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

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

nal*_*inc 6

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

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

您需要的主要是文档级访问控制,用户可以document根据特定字段中的值访问.不幸的是,从版本3.0开始,还没有任何内置的方法来提供文档/字段级别的访问控制.Mongo的ACL仅转到Collection级别.

..那么如何为不同类型的用户使用不同的模式.并限制一个用户访问其他资源.

由于上面提到的原因,如果"资源"是指"文档",那么仅在数据库级别这是不可能的.但是,您仍然可以设法在应用程序级别(sailJS)上实现类似的功能.在数据库级别,您可以做的最好的事情是将用户文档移动到不同的集合.您可以使用createRole()方法创建角色并指定其权限.

对于SuperAdmins:

db.createRole({ role: "SuperAdmin",
  privileges: [
    { resource: { db: "myCustomDB", collection: "" }, actions: [ "find", "update", "insert", "remove" ]}
  ],
  roles: []
})
Run Code Online (Sandbox Code Playgroud)

SuperAdmins有权访问myCustomDB数据库中所有集合和执行find,update,insertremove行动

对于管理员:

db.createRole({ role: "Admin",
  privileges: [
    { resource: { db: "myCustomDB", collection: "AdminCollection" }, actions: [ "find", "update", "insert", "remove" ]},
    { resource: { db: "myCustomDB", collection: "" }, actions: [ "find"]}
  ],
  roles: []
})
Run Code Online (Sandbox Code Playgroud)

管理员可以访问自己集合中的所有文档并执行CRUD操作.但是,它们只具有对数据库中任何其他集合的只读访问权限.

对于用户:

db.createRole({ role: "User",
  privileges: [
    { resource: { db: "myCustomDB", collection: "UserCollection" }, actions: [ "find", "update", "insert", "remove" ]}
  ],
  roles: []
})
Run Code Online (Sandbox Code Playgroud)

注意:如果您使用的是2.4(或更低版本),则需要将该用户集合移动到其他数据库.MongoDB 2.4(及以下)ACL仅转到数据库级.