2024-07-27 00:45:39
针对这个需求,可以考虑使用 MongoDB 的嵌套文档来存储权限列表。可以将权限列表存储为一个文档,其中每个权限都是一个嵌套的子文档。下面是一个示例文档:
{
"_id": ObjectId("123456789012345678901234"),
"name": "权限列表",
"access": [
{
"id": "1",
"name": "权限1",
"code": "code1",
"children": [
{
"id": "11",
"name": "权限1-1",
"code": "code1-1"
},
{
"id": "12",
"name": "权限1-2",
"code": "code1-2",
"children": [
{
"id": "121",
"name": "权限1-2-1",
"code": "code1-2-1"
}
]
}
]
},
{
"id": "2",
"name": "权限2",
"code": "code2",
"children": [
{
"id": "21",
"name": "权限2-1",
"code": "code2-1"
}
]
}
]
}
在上面的示例文档中,access 是一个数组,其中每个元素都是一个权限对象,每个权限对象中包含 id、name、code 和 children 四个属性。如果一个权限有子权限,那么它的 children 属性就是一个嵌套的权限对象数组。
对于操作数据的需求,可以使用 MongoDB 的官方驱动程序或者第三方库(如 Mongoose)来操作数据。下面是一些示例代码:
查询权限
使用 find 方法查询权限文档,并将 access 数组返回即可。
const collection = db.collection('permissions');
const doc = await collection.findOne({});
const access = doc.access;
const collection = db.collection('permissions');
const doc = await collection.findOne({});
const access = doc.access;
const collection = db.collection('permissions');
const parentId = '1';
const { name, code } = req.body;
const newAccess = {
id: '13',
name,
code
};
const result = await collection.updateOne(
{ 'access.id': parentId },
{ $push: { 'access.$.children': newAccess } }
);
const collection = db.collection('permissions');
const parentId = '1';
const { name, code } = req.body;
const newAccess = {
id: '13',
name,
code
};
const result = await collection.updateOne(
{ 'access.id': parentId },
{ $push: { 'access.$.children': newAccess } }
);
在上面的代码中,使用 updateOne 方法更新权限文档。第一个参数是一个查询条件,用于定位需要更新的文档。这里使用 access.id 来查询权限文档,找到对应的权限记录。第二个参数是一个更新操作,使用 $push 操作符将新的权限对象添加到 access.$.children 数组中。$ 符号代表数组中匹配到的第一个元素。
编辑权限
使用 $set 操作符更新指定权限对象的 name 和 code 属性。
const collection = db.collection('permissions');
const id = '1';
const { name, code } = req.body;
const result
如果回答不够完整,请指出!
希望能帮上忙