2014-10-12 7 views
6

Potrzebuję stworzyć schemat dla aplikacji dla wielu użytkowników, którą muszę rozwijać przy użyciu MongoDB, Express, AngularJS i NodeJS. Mam 4 typy użytkowników w tej aplikacji, GUEST, REGISTERED_USER, SUBSCRIBER, ADMIN. Po zarejestrowaniu aplikacji przez użytkownika muszę wyświetlać formularze i informacje na podstawie roli (lub roli) danego użytkownika.Schemat mangusty dla aplikacji dla wielu użytkowników

Czy ktoś mógłby mi dać jakiś pomysł na temat obsługi schematu dla różnych ról użytkownika, ponieważ mógłbym później użyć go do funkcji ról i poziomu dostępu?

Na przykład, co następuje registeredUserSchema jest wspólne dla REGISTERED_USER, SUBSCRIBER, ADMIN użytkowników:

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

Ale wtedy trzeba dużo informacji, aby zostać poproszony od użytkownika z SUBSCRIBER roli więc gdy on zarejestrowany wniosku, chciałbym wyświetlić wiele dodatkowych informacji, aby pokazać mu, że ma być wypełniony w jego informacji acocunt, niż użytkownik z tylko REGISTERED_USER.

Czy ktoś może mi w tym pomóc?

EDIT: Więcej wyjaśnieniu

Na przykład REGISTERED_USER będzie miał userId, ale użytkownik z SUBSCRIBER rolę będzie miał subscriberId. Muszę zdecydować, jak uporządkować te dane, ponieważ istnieją dane wspólne dla wszystkich użytkowników, a następnie dla każdego użytkownika są różne dane w zależności od jego roli. Potrzebuję pomocy w zakresie strategii, aby wybrać strukturę tych danych. Na przykład w Java Persistence API mamy różne strategie dziedziczenia do struktury danych w relacyjnych tabelach bazy danych.

Odpowiedz

6

Używam tej kolekcji dla tej części:

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. 

z czymś w rodzaju tych zbiorów można łatwo zarządzać swoimi użytkownikami. Mam nadzieję, że mają dla ciebie dobre pomysły.

AKTUALIZACJA: Bardziej elastyczny schemat może mieć tablicę identyfikatora roli w obiekcie kontaktowym, a kontakt może mieć wiele ról, a jego/jej uprawnienia stanowią połączenie wszystkich uprawnień ról.

+0

Rzecz mam to, że w zależności od roli użytkownika, muszę poprosić i zapisywać informacje do bazy danych. Na przykład zarejestrowany użytkownik będzie miał 'userId', ale użytkownik z rolą subskrybującą będzie miał' subscriberId'. Muszę zdecydować, jak uporządkować te dane, ponieważ istnieją dane wspólne dla wszystkich użytkowników, a następnie dla każdego użytkownika są różne dane w zależności od jego roli. Potrzebuję pomocy w zakresie strategii, aby wybrać strukturę tych danych. Na przykład w Java Persistence API mamy różne strategie dziedziczenia do struktury danych w relacyjnych tabelach bazy danych. – skip

1

Oto schemat użytkownik z MEAN.JS generatora Yeoman rusztowania:

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

Jeśli mam 3 role, powiedz "REGISTERED_USER", "SUBSCRIBER" i "ADMIN", a jest kilka wspólnych danych w każdej z ról, to w jaki sposób powinienem uporządkować te dane, aby zapisać je w bazie danych. Na przykład: Co, jeśli "UserSchema" to dane, które są typowymi danymi, które należy zapisać dla użytkowników dowolnej z 3 ról? Jak zorganizować schemat dla użytkowników z innymi rolami? Dziękuję za odpowiedź. – skip

+2

Możesz dodać dodatkowe informacje do UserSchema i wypełnić je tylko wtedy, gdy rola pasuje do tego, co powinna. –

+0

Ale jak powinienem zająć się rejestracją użytkownika, któremu chcę przypisać rolę "REGISTERED_USER" podczas rejestracji, i użytkownikiem, któremu chciałbym przypisać rolę "SUBSCRIBER"? – skip

Powiązane problemy