如何使用猫鼬为用户架构设置成员角色

时间:2018-10-11 16:45:58

标签: mongoose mongoose-schema

我正在尝试找出如何与成员,管理员,用户,来宾建立用户架构的方法。这是什么想法,但这是常规的做法吗?我很难找到一个好的资源来学习如何做。

const UserSchema = new Schema({
  username: {
    type: String,
    required: true
  },
  role: {
    type: [
      {
        type: String,
        enum: ["user", "admin"],
        default: ["user"]
      }
     ]
   },
   email: {
     type: String,
     required: true
   },
   password: {
     type: String,
     required: true
   },
   date: {
     type: Date,
     default: Date.now
   }
  });

1 个答案:

答案 0 :(得分:0)

您想要做的是从所需的最小属性集开始,这些属性在3种模型类型(来宾,用户,管理员)之间共享,这就是您的基本模式。

然后使用Mongoose descriminators(猫鼬模式继承)继承自它,并为您的模型建模添加更多属性。

例如,您的guest可能没有role属性,因为他是访客。因此,您可能要从guest的基本模型开始,并在其基础上添加用户/管理员所需的其他道具。

示例:

var options = {discriminatorKey: 'type'};

var guestSchema = new mongoose.Schema({
  date: { type: Date, default: Date.now },
  username: { type: string, default: 'guest_' + Date.now },
}, options);

var Guest = mongoose.model('Guest', guestSchema);

var User = Guest.discriminator('User',
  new mongoose.Schema({password: String}, options));

// Now you have Guest as base model and User with decorated 'password' field

您可以阅读official documentation on this here

关于该主题的在线文章也很多。