用于多用户应用程序的Mongoose模式

ski*_*kip 6 mongoose mongodb node.js express angularjs

我需要为需要使用MongoDB,Express,AngularJS和NodeJS开发的多用户应用程序制作模式.我有4种在该应用的用户,GUEST,REGISTERED_USER,SUBSCRIBER,ADMIN.一旦用户注册了应用程序,我需要根据特定用户的角色显示表单和信息.

有人可以给我一些关于如何处理用户不同角色的架构的想法,因为我以后可以将它用于角色和访问级别的功能吗?

例如,以下registeredUserSchema是常见的REGISTERED_USER,SUBSCRIBER,ADMIN用户:

var registeredUserSchema = mongoose.Schema({
    userId: String,
    fullName: String ,
    email: String,
    password: String,
    created: { type: Date, default: Date.now },
    roles: [String]
});
Run Code Online (Sandbox Code Playgroud)

但是我需要从有SUBSCRIBER角色的用户那里询问很多信息,所以一旦他注册了应用程序,我想显示很多额外的信息,以显示他填写他的acocunt信息,而不是用户只是REGISTERED_USER.

有人可以帮我吗?

编辑:更多解释

例如,a REGISTERED_USER将拥有userId,但具有SUBSCRIBER角色的用户将拥有subscriberId.因此,我需要决定如何构建数据,因为所有用户都有共同的数据,然后根据他的角色为每个用户提供不同的数据.我需要帮助选择构建数据的策略.例如,在Java Persistence API中,我们有各种继承策略来构造关系数据库表中的数据.

MEA*_*per 7

这是来自 MEAN.JS 自耕农脚手架生成器的用户架构:

    var UserSchema = new Schema({
    firstName: {
        type: String,
        trim: true,
        default: '',
        validate: [validateLocalStrategyProperty, 'Please fill in your first name']
    },
    lastName: {
        type: String,
        trim: true,
        default: '',
        validate: [validateLocalStrategyProperty, 'Please fill in your last name']
    },
    displayName: {
        type: String,
        trim: true
    },
    email: {
        type: String,
        trim: true,
        default: '',
        validate: [validateLocalStrategyProperty, 'Please fill in your email'],
        match: [/.+\@.+\..+/, 'Please fill a valid email address']
    },
    username: {
        type: String,
        unique: 'testing error message',
        required: 'Please fill in a username',
        trim: true
    },
    password: {
        type: String,
        default: '',
        validate: [validateLocalStrategyPassword, 'Password should be longer']
    },
    salt: {
        type: String
    },
    provider: {
        type: String,
        required: 'Provider is required'
    },
    providerData: {},
    additionalProvidersData: {},
    roles: {
        type: [{
            type: String,
            enum: ['user', 'admin']
        }],
        default: ['user']
    },
    updated: {
        type: Date
    },
    created: {
        type: Date,
        default: Date.now
    },
    /* For reset password */
    resetPasswordToken: {
        type: String
    },
    resetPasswordExpires: {
        type: Date
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 您可以将附加信息添加到 UserSchema 中,并且仅在角色与其应有的匹配时才填充它。 (2认同)

Ely*_*s74 6

我在这个部分使用这个集合:

var permissions_schema = mongoose.Schema({
    name : String,
    title : String
}); // this are mostly static data

var roles_schema = mongoose.Schema({
    name : String,
    title : String,
    _permissions : Array
});// _permissions is an array that contain permissions _id

var contacts_schema = mongoose.Schema({
    mobile : String,
    password : String,
    first_name : String,
    last_name : String,
    _role : Number,
    _enabled : Boolean,
    _deleted : Boolean,
    _verify_code : Number,
    _groups_id : Array,
    _service_id : String
}); // and at last _role is _id of the role which this user owns.
Run Code Online (Sandbox Code Playgroud)

通过这些集合,您可以轻松管理用户.我希望这些对你有好的想法.

更新:更灵活的模式可以在联系对象中包含role_id数组,并且联系人可以具有多个角色,并且他/她的权限是所有角色权限的合并.