2014-10-12 14 views
6

मुझे मल्टीओडीबी, एक्सप्रेस, एंगुलरजेएस और नोडजेएस का उपयोग करके विकसित करने के लिए एक बहु उपयोगकर्ता एप्लिकेशन के लिए स्कीमा बनाना होगा। मेरे पास उस एप्लिकेशन में 4 प्रकार के उपयोगकर्ता हैं, GUEST, 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 भूमिका के साथ एक उपयोगकर्ता से पूछा जाना तो एक बार वह करने के लिए पंजीकृत किया गया है:

उदाहरण के लिए, निम्नलिखित registeredUserSchema के लिए REGISTERED_USER, SUBSCRIBER, ADMIN उन आम है आवेदन, मैं केवल REGISTERED_USER वाले उपयोगकर्ता की तुलना में उसे अपने एकोकंट जानकारी में भरने के लिए बहुत सारी अतिरिक्त जानकारी प्रदर्शित करना चाहता हूं।

क्या कोई मेरी मदद कर सकता है?

संपादित करें: अधिक explaination

उदाहरण के लिए, एक REGISTERED_USERuserId होगा, लेकिन SUBSCRIBER भूमिका के साथ एक उपयोगकर्ता subscriberId करने जा रहा है। तो मुझे यह तय करने की ज़रूरत है कि उस डेटा को कैसे व्यवस्थित किया जाए क्योंकि डेटा के सभी उपयोगकर्ताओं के लिए आम है और फिर प्रत्येक उपयोगकर्ता के लिए उनकी भूमिका के आधार पर डेटा अलग-अलग होता है। मुझे उस डेटा को ढूढ़ने के लिए रणनीति पर मदद की ज़रूरत है। उदाहरण के लिए, जावा पर्सिस्टेंस एपीआई में हमारे पास डेटाबेस तालिकाओं के संबंध में डेटा बनाने के लिए विभिन्न विरासत रणनीतियां हैं।

उत्तर

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. 

इन संग्रहों की तरह कुछ के साथ आप अपने उपयोगकर्ताओं को आसानी से प्रबंधित कर सकते हैं। मुझे आशा है कि आपके पास आपके लिए अच्छे विचार हैं।

अद्यतन: अधिक ऑब्जेक्ट स्कीमा में संपर्क ऑब्जेक्ट में role_id की सरणी हो सकती है, और संपर्क में कई भूमिकाएं हो सकती हैं और उसकी अनुमति सभी भूमिका अनुमतियों में विलय हो सकती है।

+0

बात मैं एक उपयोगकर्ता मैं के लिए पूछ सकते हैं और डेटाबेस के लिए जानकारी सहेजनी की भूमिका पर आधारित है। उदाहरण के लिए, एक पंजीकृत उपयोगकर्ता के पास 'userId' होगा, लेकिन ग्राहक भूमिका वाले उपयोगकर्ता को' ग्राहक आईडी 'होने वाला है। तो मुझे यह तय करने की ज़रूरत है कि उस डेटा को कैसे व्यवस्थित किया जाए क्योंकि डेटा के सभी उपयोगकर्ताओं के लिए आम है और फिर प्रत्येक उपयोगकर्ता के लिए उनकी भूमिका के आधार पर डेटा अलग-अलग होता है। मुझे उस डेटा को ढूढ़ने के लिए रणनीति पर मदद की ज़रूरत है। उदाहरण के लिए, जावा पर्सिस्टेंस एपीआई में हमारे पास डेटाबेस तालिकाओं के संबंध में डेटा बनाने के लिए विभिन्न विरासत रणनीतियां हैं। – skip

1

यहाँ MEAN.JS Yeoman मचान जनरेटर से उपयोगकर्ता स्कीमा है:

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',' सदस्यता लें 'और' एडमिन 'कहें, और प्रत्येक भूमिका में कुछ सामान्य डेटा है, तो मुझे उस डेटा को डेटाबेस में सहेजने के लिए कैसे बनाना चाहिए। उदाहरण के लिए, क्या होगा यदि 'UserSchema' डेटा है जो सामान्य डेटा है जिसे किसी भी 3 भूमिकाओं के उपयोगकर्ताओं के लिए सहेजने की आवश्यकता है? मैं अन्य भूमिकाओं वाले उपयोगकर्ताओं के लिए स्कीमा कैसे बना सकता हूं? जवाब देने के लिए धन्यवाद। – skip

+2

आप उपयोगकर्ता केशेमा को जानकारी के अतिरिक्त टुकड़े जोड़ सकते हैं और यदि भूमिका से मेल खाती है तो भूमिका केवल इसे पॉप्युलेट कर सकती है। –

+0

लेकिन मुझे ऐसे उपयोगकर्ता के पंजीकरण की देखभाल कैसे करनी चाहिए, जिन्हें मैं पंजीकरण पर केवल 'REGISTERED_USER' भूमिका नियुक्त करना चाहता हूं, और वह उपयोगकर्ता जिसे मैं' सब्सक्राइबर 'भूमिका नियुक्त करना चाहता हूं? – skip

संबंधित मुद्दे