Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Node.js 在每个区域上创建具有特定权限的MongoDB用户模式_Node.js_Mongodb_Mongoose_Mongoose Schema - Fatal编程技术网

Node.js 在每个区域上创建具有特定权限的MongoDB用户模式

Node.js 在每个区域上创建具有特定权限的MongoDB用户模式,node.js,mongodb,mongoose,mongoose-schema,Node.js,Mongodb,Mongoose,Mongoose Schema,我必须做一个页面来输入一些特定地区的人的数据。每个用户都将拥有特定区域的权限 因此,我将把两个集合合并成一个DB。一个用于用户,一个用于区域 用户将只能访问一个区域(或在某些情况下访问更多区域)和特定的访问权限,如读或写、读和写等 如何对模式进行建模,以便添加更多区域 我就是这样做的: var mongoose=require(“mongoose”), passportLocalMongoose=需要(“passport local mongoose”); 让userSchema=newmon

我必须做一个页面来输入一些特定地区的人的数据。每个用户都将拥有特定区域的权限

因此,我将把两个集合合并成一个DB。一个用于用户,一个用于区域

用户将只能访问一个区域(或在某些情况下访问更多区域)和特定的访问权限,如读或写、读和写等

如何对模式进行建模,以便添加更多区域

我就是这样做的:

var mongoose=require(“mongoose”),
passportLocalMongoose=需要(“passport local mongoose”);
让userSchema=newmongoose.Schema({
用户名:
{type:String,
独一无二:真的
},
密码:String,
特权:
{
区域:[编号],
读:[数字],
写:[数字],
编辑:[编号]
}
});
插件(passportLocalMongoose);

module.exports=mongoose.model(“用户”,userSchema)实际上,由于privileges字段属于每个用户,因此您可以轻松地拥有具有不同权限的多个区域

把特权变成一个数组,把每个特定的权限变成一个数字,你就拥有了它

   privileges:
    [{
        regiune: Number,
        read: Number,
        write: Number,
        edit: Number
    }]
对象数组是Mongo中建模依赖对象的惯用方法。人们通常建议不要将无界数组作为子文档,但我打赌您的区域列表相对有限

您可能需要引入一些机制来确保阵列中有唯一的regiune。Mongo 4.10为此引入了一个插件:您可以这样使用:

privileges:
    [{
        regiune: { type: Number, unique: true },
        read: Number,
        write: Number,
        edit: Number
    }]

如果您想通过注册表项region1、region3等作为对象访问权限,那么您可以将权限声明为混合类型,这意味着它可以是任意json结构(但您会丢失类型信息)。或者,您可以将其设置为一个单独的模型、集合以及对用户对象的反向引用。用户对象也可以有一个新模型的引用列表(但它仍然是一个数组而不是对象)。

非常感谢您再次帮助我!不过还是有个小问题-为什么要使用[{}]。它不应该是带有数组的对象吗?如果我是对的,现在它是一个对象数组。如果你每个regione有一个权限,每个用户有一个权限类型,你就会这样做。您还可以将其建模为具有多个键的对象,{region1…,region2:{read,write…}},但随后您会将权限分解为单独的模型和collectionOkay。再次感谢!我又给你加了一些注释。