5

मान लीजिए कि मेरे पास एक जटिल प्रणाली है जहां लोगों के बड़े पेड़ हैं। सरल विचार कर्मचारी/प्रबंधक संबंध हैं, कई कर्मचारी एक प्रबंधक को रिपोर्ट करते हैं। अब प्रबंधक के अलावा वहां सहायक स्टाफ हैं जो प्रबंधक की ओर से कार्य करने में सक्षम हैं प्रबंधकों के कर्मचारियों में हेरफेर कर सकते हैं।सीक्यूआरएस सुरक्षा जैसे क्रॉस कटिंग चिंताओं को लागू करता है

एक सीक्यूआरएस सिस्टम में आप "कर्मचारी संपादित करें" की एक कल्पित कार्रवाई के लिए एक संदेश कैसे मॉडल करेंगे जहां कार्रवाई का चालक एक सहायक कर्मचारी है। कार्रवाई केवल तभी सफल हो सकती है जब प्रबंधक सुरक्षा संबंध के अनुसार कर्मचारी सदस्य अपने क्षेत्र में किसी कर्मचारी पर कार्य कर रहा हो।

इसकी सुरक्षा को सत्यापित करने में डेटाबेस को क्वेरी करने में शामिल होना शामिल होगा कि यह संशोधित करने वाला व्यक्ति वास्तव में उस प्रबंधक की कर्मचारी श्रृंखला के अंदर है।

यह प्रश्न कहां होगा? "कर्मचारी संपादित करें" संदेश की उत्पत्ति से पहले?

यदि संदेश को उत्पत्ति से पहले डेटा को पहले से सत्यापित किया गया है, तो अंततः संगत प्रणाली में मान लीजिए कि "कर्मचारी संपादित करें" संदेश को संसाधित करने से पहले एक अलग कार्रवाई हुई है जो उपयोगकर्ता के अधिकार को " कर्मचारी "कार्रवाई संपादित करें। यदि कमांड हैंडलर उस संदेश की सुरक्षा चिंताओं को मान्य नहीं करता है, तो संदेश तब भी सफल होगा जब उपयोगकर्ता अब इसे निष्पादित करने का अधिकार नहीं रखता है।

यह इंगित करता है कि यूआई सत्यापन & सर्वर साइड सत्यापन के समान डबल पक्षीय सत्यापन कार्रवाई का सबसे अच्छा तरीका होगा। हालांकि उस सत्यापन को पूरा करने की विधि प्रतीत होती है कि यह सीक्यूआरएस के प्रमुख सिद्धांतों का उल्लंघन करेगा।

सीक्यूआरएस का उपयोग करते समय इन और अन्य समान क्रॉस कटिंग चिंताओं से निपटने के लिए क्या दृष्टिकोण (एस) सबसे अच्छा है?

+1

आईएमओ का कोई सामान्य उत्तर नहीं है ... मैं हमेशा कमांडर साइड * कम से कम * और ** वैकल्पिक रूप से ** "अप-फ्रंट" कमांड पर मान्य होगा (जो उस भाग में हो सकता है जो कतार में एक संदेश स्वीकार करता है) – Yahia

+0

मुझे यह भी लगता है कि प्रमाणीकरण, सरल प्रमाणीकरण (इस उपयोगकर्ता को इस प्रकार की कार्रवाई करने की अनुमति है) जैसे वास्तविक क्रॉस-कटिंग चिंताओं के बीच अंतर करना महत्वपूर्ण है, जो कि किसी विशिष्ट इकाई के लिए कुछ अनुमति है या नहीं। –

उत्तर

3

मैं शायद इस डोमेन के लिए पूरी तरह से सीक्यूआरएस छोड़ दूंगा और वेब स्तरीय बात सीधे डीबी टियर (कोई मैसेजिंग) नहीं करूँगा। सरल आशावादी समेकन को होने वाले कुछ संघर्षों को संभालना चाहिए।

+0

क्या आप अपनी पहली प्रक्रिया के बारे में अपनी विचार प्रक्रिया को समझा सकते हैं? –

+1

क्योंकि यह सबसे आसान समाधान है जो संभवतः काम कर सकता है :) –

+0

यह निश्चित रूप से सच है, हालांकि यदि सबसे सरल हमेशा कार्रवाई का सबसे अच्छा तरीका होता है तो सीक्यूआरएस पैटर्न का कोई अस्तित्व नहीं होगा? –

5

सबसे पहले, मैं @ याहिया की टिप्पणी से सहमत हूं कि कोई सामान्य उत्तर नहीं है। इसके साथ, यहां बताया गया है कि मैं इसे कैसे पहुंचाऊंगा।

आरंभ करने के लिए, मैं शायद डबल सत्यापन के साथ जाऊंगा - एक बार मेरे नियंत्रक में जब अनुरोध पहली बार प्राप्त हुआ था, और उसके बाद बाद में मेरे डोमेन में यह आदेश संसाधित कर रहा था। कुछ इसके साथ सहमत नहीं हो सकते हैं, लेकिन मैं आदेश जारी करने से कमांड को रोकूंगा और उपयोगकर्ता को तुरंत यह बता दूंगा कि आदेश कम करने के बजाय कुछ कार्रवाई करने के लिए अधिकृत नहीं थे और चेतावनी देने के लिए कुछ त्रुटि नोटिस के लिए अंतिम स्थिरता पर भरोसा करते थे उपयोगकर्ता इस तथ्य के बाद कि वे कार्रवाई नहीं कर सके।

तो, छद्म कोड के मामले में, यहाँ कर्मचारी संपादित करने के लिए अपने दृष्टिकोण है:

नियंत्रक

[HttpPost] 
ActionResult Edit(Employee emp){ 

    //get employee org information from _employeeRepository 
    //validate if _loggedInUserID is able to edit emp.ID 

    if(isValid) { 
    //construct command 
    _commandService.EnqueueCommand(new EditEmployee(emp.ID, emp.Name, emp.Salary)); 
    } else { 
    return View("PermissionError"); 
    } 

    return Redirect("EmployeeProperties"); 
} 

तो यहाँ मेरी आदेश सेवा आदेश और उचित एआर के लिए मार्गों यह ऊपर उठाता है मेरे डोमेन में, जो कर्मचारी होगा।

कर्मचारी डोमेन

protected void EditEmployee(userID, employeeID, employeeName, salary){ 
    //get employee org information from _employeeRepository 
    //validate if userID is able to edit employeeID 

    if(isValid) { 
    //apply event 
    ApplyEvent(new EmployeeEdited(userID, employeeID, employeeName, salary)); 
    } 
} 

इसलिए मैं दोनों मेरे नियंत्रक में है और मैं डोमेन में एक ही सुरक्षा जांच लागू होगा। मेरे पास यह संभवतः एक encapsulated विधि के रूप में होगा (अच्छी तरह से, शायद एक encapsulated मानदंड वर्ग जो मैं भंडार में पास होगा)।

तो मुझे उम्मीद है कि इससे इस परिदृश्य में कैसे पहुंचेगा इससे मदद मिलती है।अगर प्रश्न हैं तो मुझे बताएं और मैं अपने जवाब में विस्तार से बताऊंगा।

मुझे उम्मीद है कि इससे मदद मिलती है। सौभाग्य!

+0

आप इसे दोनों स्तरों पर क्यों लागू करेंगे? क्या डोमेन उस बिंदु को नहीं लेता है जहां सबकुछ गुज़रना चाहिए और इस प्रकार सुरक्षा और सत्यापन जैसे चिंताओं को संभाला जाना चाहिए ?? – Juri

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