2014-10-12 6 views
6

Мне нужно создать схему для многопользовательского приложения, которое мне нужно разработать с использованием MongoDB, Express, AngularJS и NodeJS. У меня есть 4 типа пользователей в этом приложении, GUEST, REGISTERED_USER, SUBSCRIBER, ADMIN. Как только пользователь зарегистрировал приложение, мне нужно отобразить формы и информацию на основе роли (ов) конкретного пользователя.Схема Mongoose для многопользовательского приложения

Может ли кто-нибудь дать мне некоторое представление о том, как обрабатывать схему для разных ролей пользователя, поскольку я мог бы впоследствии использовать ее для функций роли и уровня доступа?

Например, следующая 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] 
}); 

Но тогда мне нужно много информации, чтобы спросить у пользователя с SUBSCRIBER роли так, как только он прописал приложение, я бы хотел отобразить много дополнительной информации, чтобы показать, что он заполняется в его информации о acocunt, чем пользователь с REGISTERED_USER.

Может ли кто-нибудь помочь мне с этим?

EDIT: Больше Explaination

Например, REGISTERED_USER будет userId, но пользователь с SUBSCRIBER роль будет иметь subscriberId. Поэтому мне нужно решить, как структурировать эти данные, так как есть данные, общие для всех пользователей, а затем для каждого пользователя существуют разные данные, основанные на его роли. Мне нужна помощь в стратегии выбора структуры данных. Например, в Java Persistence API мы используем различные стратегии наследования для структурирования данных в реляционных таблицах баз данных.

ответ

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. 

С чем-то вроде этих коллекций вы можете управлять пользователями легко. Надеюсь, у них есть хорошие идеи для вас.

UPDATE: Более гибкая схема может иметь массив role_id в контактном объекте, а контакт может иметь много роли, а его разрешения - слияние всех разрешений ролей.

+0

То, что я есть, что на основе роли пользователя, мне нужно попросить и сохранить информацию в базе данных. Например, у зарегистрированного пользователя будет 'userId', но у пользователя с ролью подписчика будет' подписчикId'. Поэтому мне нужно решить, как структурировать эти данные, так как есть данные, общие для всех пользователей, а затем для каждого пользователя существуют разные данные, основанные на его роли. Мне нужна помощь в стратегии выбора структуры данных. Например, в Java Persistence API мы используем различные стратегии наследования для структурирования данных в реляционных таблицах баз данных. – skip

1

Вот схема пользователя из 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 
    } 
}); 
+0

Если у меня есть 3 роли, скажите 'REGISTERED_USER',' SUBSCRIBER' и 'ADMIN', и есть некоторые общие данные в каждой из ролей, то как я должен структурировать эти данные, чтобы сохранить их в базе данных. Например, что, если 'UserSchema' - это данные, которые являются общими данными, которые необходимо сохранить для пользователей любой из трех ролей? Как структурировать схему для пользователей с другими ролями? Спасибо за ваш ответ. – skip

+2

Вы можете добавить дополнительные данные в UserSchema и только заполнить их, если роль соответствует тому, что она должна. –

+0

Но как мне позаботиться о регистрации пользователя, которому я хочу назначить только роль REGESTERED_USER при регистрации, и пользователя, которому я хотел бы назначить роль 'SUBSCRIBER'? – skip

Смежные вопросы