Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo聚合嵌套数组,查找_Mongodb_Go_Mgo - Fatal编程技术网

Mongodb Mongo聚合嵌套数组,查找

Mongodb Mongo聚合嵌套数组,查找,mongodb,go,mgo,Mongodb,Go,Mgo,我正在使用MongoDB和Go创建一个web应用程序,其中包括基于角色的访问控制。我将这方面的信息存储在两个集合中,权限和角色 这就是这两个系列的外观。 权限 { "operation": "create", "resource": "project" } { "operation": "read", "resource": "project" } { "operation": "update", "resource": "project" } {

我正在使用MongoDB和Go创建一个web应用程序,其中包括基于角色的访问控制。我将这方面的信息存储在两个集合中,
权限
角色

这就是这两个系列的外观。 权限

{
    "operation": "create",
    "resource": "project"
}
{
    "operation": "read",
    "resource": "project"
}
{
    "operation": "update",
    "resource": "project"
}
{
    "operation": "delete",
    "resource": "project"
}
{
    "operation": "create",
    "resource": "user"
}
资源
是执行
操作的对象。因此,如果有一些操作无法在某些资源上执行,那么我不需要存储它。例如,只能创建用户,因此只需存储
create
user
。 目前,在应用程序范围内只有4个操作(创建、读取、更新、删除),但可能会增加,如
上传
可能会出现

角色

角色包含角色、要在UI上显示的角色的名称以及该角色拥有的权限集

我需要使用特定格式的REST API将此信息发送到UI,该格式将描述特定角色是否可以使用
checked
标志对资源执行操作,以及是否可以使用
isEditable
标志对资源执行特定操作。 例如,permissions集合不包含对资源用户的删除操作,因此它不应该是可编辑的,因此该标志设置为false。同样,可以创建用户,因此将其设置为true

 {
    display_name: "System Administrator",
    role: "admin",
    permissions: [
      {
        resource: "user",
        privilages: {
          create: { checked: false, isEditable: true },
          delete: { checked: false, isEditable: false },
          update: { checked: false, isEditable: false },
          read: { checked: false, isEditable: false }
        }
      },
      {
        resource: "project",
        privilages: {
          create: { checked: true, isEditable: true },
          delete: { checked: true, isEditable: true },
          update: { checked: true, isEditable: true },
          read: { checked: true, isEditable: true }
        }
      }
   ]
}

是否可以使用mongo聚合执行此操作?或者我是否需要在模式中进行修改,如果需要,那么应该进行哪些修改。

我可以通过3个步骤解决问题:

  • 包括每个角色的所有权限,并添加一个名为
    checked
    的标志。这增加了数据冗余,但这不是什么大问题
  • 角色
    集合中的
    资源
    字段上执行
    分组依据
  • 在服务器端将
    isEditable
    设置为false时,为每个
    资源填充缺少的
    特权

  • 我必须遍历服务器端的数据,但这是我能想到的最有效的方法。

    为什么不将所需的文档存储到单个集合中?还有,你试过什么?
     {
        display_name: "System Administrator",
        role: "admin",
        permissions: [
          {
            resource: "user",
            privilages: {
              create: { checked: false, isEditable: true },
              delete: { checked: false, isEditable: false },
              update: { checked: false, isEditable: false },
              read: { checked: false, isEditable: false }
            }
          },
          {
            resource: "project",
            privilages: {
              create: { checked: true, isEditable: true },
              delete: { checked: true, isEditable: true },
              update: { checked: true, isEditable: true },
              read: { checked: true, isEditable: true }
            }
          }
       ]
    }