मैं भूमिकाओं के लिए दिए गए नाम पसंद है।
जैसा कि आप MEAN स्टैक का उपयोग कर रहे हैं और अधिकतर मार्ग सत्यापन node
पर होता है, मैं रोल टेबल को सरल रखना पसंद करूंगा।
भूमिका:
{
_id : 1,
name : GOD,
golbalPerms : true
},
{
_id : 2,
name : SUPER HERO,
privatePerms : true
},
{
_id : 3,
name : MAN
}
उपयोगकर्ता:
{
_id : 111,
name : Jesus,
roleId : 1
},
{
_id : 222,
name : BatMan,
roleId : 2
},
{
_id : 333,
name : Jack,
roleId : 3
}
जब में और user
वस्तु वापस ग्राहक को भेजने से उपयोगकर्ता के लॉग, डीबी से role
वस्तु इसी के साथ roleId
बदलना सुनिश्चित करें।
नोड जे एस पर कोड के लिए आ रहा है:
पूरी तरह से अपने USECASE को समझ कर हम उन्हें निम्न विधियों में विभाजित कर सकते हैं -
CreateUser
CreateTodo
DeleteTodo
ReadTodo
- UpdateTodo
CommentTodo
AssignTodo
चरण दर चरण, CreateUser आओ चलें।
मार्गों कोड स्निपेट:
app.all('/users', users.requiresLogin);
// Users Routes
app.route('/users')
.post(users.hasPerms('globalPerms'), users.create);
अपने नियंत्रक में आप, इनपुट globalPerms
के आधार पर मान्य कर सकते हैं यदि मान्य बाकी next()
return
बुला त्रुटि संदेश इसी के साथ द्वारा उपयोगकर्ता बनाने के लिए अनुमति देते हैं।
अब CreateTodo & & DeleteTodo:
उनमें से
दोनों एक छोटे चाल के साथ एक ही तर्क पर काफी काम करते हैं।
मार्गों कोड स्निपेट:
app.all('/todos', users.requiresLogin);
// Users Routes
app.route('/todos')
.post(users.hasPerms('globalPerms','privatePerms'), todos.create);
.delete(users.hasPerms('globalPerms','privatePerms'), todos.delete);
एक तोदो बनाने के लिए, globalPerms
भगवान & privatePerms
साथ हैं सुपर हीरो साथ कर रहे हैं, उन दोनों को अनुमति दी जा सकती।
ट्रिक यहां todos.delete
विधि में होगा, बस user.id === todos.createById
सुनिश्चित करें कि सुपर हीरो भगवान द्वारा बनाए गए टोडोस को हटाने के लिए आगे बढ़ सकता है।
ReadTodo:
एक TODO यह एक createById
वैसे ही संग्रहीत की जाने वाली एक TODO तो assignedTo
किसी को सौंपा गया है और assignedBy
भी दर्ज किया जाना चाहिए होना चाहिए बना दिया जाता है।
इससे कई अन्य परिचालनों को संभालने में आसान बनाता है।
user.role.globalPerms
- भगवान को सभी TODO का डेटा दें।
user.role.privatePerms
- TODO को या तो बनाया गया है उसे दिया गया है या उसे सौंपा गया है।
user.role.globalPerms === undefined && user.role.privatePerms === undefined
- इसके मैन और TODO को जो केवल उन्हें सौंपा गया है।
UpdateTodo & CommentTodo:
सरल एक, loggedInUser.id === todos.createdById
तो वह उसे किसी को भी प्रदान कर सकते हैं:
यह वही है ReadTODO तो DIY करता
अंतिम एक, AssignTodo की सटीक प्रतिकृति है ।
दो बातें ध्यान में रखने के लिए यहाँ:
बताए हिस्सा ज्यादातर अपने यूआई पर होता है (कोणीय) सामने, मैं loggedInUser.id === todos.createdById
जाँच की है कि दृष्टिकोण दिया है। किसी भी तरीके से लॉग इन ऑपरेशन द्वारा सभी TODO को देखे जाने वाले किसी भी तरीके से लॉग इन किया जा सकता है और इसे किसी भी व्यक्ति को असाइन कर सकता है।
सुनिश्चित करें कि सुपर हीरो केवल खुद को या अन्य सुपर हीरो या एक आदमी को TODO असाइन कर सकता है लेकिन भगवान के लिए नहीं। यूआई फ्रंट पर विकल्पों को असाइन करने के तरीके को आप कैसे दिखाते हैं इस सवाल के दायरे से बाहर है। यह सिर्फ एक सिर ऊपर है।
आशा यह स्पष्ट किया गया था।
नोट: रोल संग्रह में MAN को अनुमति देने की कोई आवश्यकता नहीं थी & हमने सभी संभावित संचालनों को प्रबंधित किया।
यह साफ-सुथरा संभव समाधान था जिसे मैं किसी भी तृतीय पक्ष मॉड्यूल का उपयोग करके बाहर निकलने के लिए कह सकता था। धन्यवाद :) – BeingSuman