繁体   English   中英

创建Mongoose / MongoDB常量文档

[英]Creating Mongoose/MongoDB constant documents

我正在尝试对我正在编写的NodeJS程序实施一种基于角色的访问控制。 这些角色将与所有其他数据一起使用Mongoose存储在MongoDB数据库中。 RoleSchema创建了RoleSchema 角色的名称类型为String,数组类型为String,其中包含角色权限。 我已经在下面发布了该代码。

对于我的API,我要实现三个角色:用户,作者和管理员,每个角色具有不同的权限。 在集合中一次创建这些文档的最佳方法是什么? 我知道我可以简单地手动创建条目,但是我觉得编程解决方案会更好。 是否像检查角色是否已经创建,是否创建角色一样简单,还是有更好的方法呢?

const RoleSchema = new Schema({
    role: {
        type: String,
        default: "user",
    },
    permissions: {
        type: [String]
    }
})

const RoleModel = mongoose.model('roles',RoleSchema)
RoleModel.create({
    role: 'user',
    permissions: ['readPost', 'commentPost', 'votePost']
}, (error, result) => {})

播种

因此,播种数据库是一个向数据库提供初始数据集的过程。

作为最佳实践 ,应该手动配置种子数据以自动插入文档,而不是手动插入数据。

var seeder = require('mongoose-seed');

// Connect to MongoDB via Mongoose
seeder.connect('mongodb://localhost/yourDatabase', function() {

// Load Mongoose models
seeder.loadModels([
    'models/roles.js'
]);

// Clear specified collections
seeder.clearModels(['roles'], function() {

// Callback to populate DB once collections have been cleared
seeder.populateModels(data, function() {
        seeder.disconnect();
     });

  });
});

// Data array containing seed data - documents organized by Model 
var data = [
   {
      'model': 'role',
      'documents': [
          {
              'role': 'user',
              'value': ['readPost', 'commentPost', 'votePost']
          },{
              'role': 'another role',
              'value': ['updatePost', 'deletePost']
          }
       ]
   }
];

将该代码放在seed.js文件上并运行它。


猫鼬种子库

假设角色名称是唯一的,那么您确实可以查询数据库并检查是否已经存在具有相同名称的角色。 如果没有,我们继续创建角色。

这对我来说很好:

const createRole = async ({role, permissions}) => {
    const matches = await RoleModel.find({role}).exec();

    if (matches.length === 0) {
        return RoleModel.create({role, permissions});
    }
};

然后可以通过以下方式调用该方法( 假设您已经连接到数据库 ):

const userRole = {
    role: "User",
    permissions: ["readPost", "commentPost", "votePost"]
};

(async () => {
    await createRole(userRole);
    console.log("User role has been created successfully.");
})()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM