मैं DDD और अभिगम नियंत्रण के बारे में पढ़ा है, और मैं निम्नलिखित दो राय के बीच कुछ विरोधाभास पाया:अभिगम नियंत्रण प्रेरित डिजाइन
- "अभिगम नियंत्रण" सुरक्षा चिंताओं डोमेन के बाहर संभाला जाना चाहिए " आवश्यकताओं डोमेन विशिष्ट "
मैं इस बारे में सबसे अच्छा अभ्यास रहा हूँ कर रहे हैं। तो मुझे डोमेन संचालित डिज़ाइन द्वारा एक्सेस कंट्रोल लॉजिक कहां रखा जाना चाहिए, और मुझे इसे कैसे कार्यान्वित करना चाहिए?
(DDD + CQRS + ES करके अधिक विशिष्ट होना करने के लिए।)
मुझे लगता है कि कहीं न कहीं व्यापार तर्क के पास होना चाहिए, उदाहरण के लिए एक उपयोगकर्ता कहानी कुछ इस तरह हो सकता है:
उपयोगकर्ता एक उपयोगकर्ता नाम, शौक, सीवी, आदि की एक सूची भेज कर अपने प्रोफ़ाइल संपादित कर सकते हैं ...
उपयोगकर्ता कहानी हम डोमेन मॉडल और सेवाओं, उदाहरण के लिए लागू के आधार पर:
UserService
editProfile(EditUserProfileCommand command)
User user = userRepository.getOneById(command.id)
user.changeName(command.name)
user.changeHobbies(command.hobbies)
user.changeCV(command.cv)
UserRepository
User getOneById(id)
User
changeName(String name)
changeHobbies(String[] hobbies)
changeCV(String cv)
यह ठीक है, लेकिन कहां है HIS profile
कहानी का हिस्सा?
यह वह जगह है जाहिर है, आधारित अभिगम नियंत्रण विशेषता है क्योंकि हम इस तरह एक नियम के कुछ लिखना चाहिए:
deny all, but if subject.id = resource.owner.id then grant access
लेकिन जहाँ हम इस नियम को लागू करना चाहिए, और हम इसे कैसे लागू करना चाहिए?
कमांड में उपयोगकर्ता आईडी सहित ('command.id') अस्पष्टता प्रस्तुत करता है। आदेश से उपयोगकर्ता आईडी को बेहतर हटाएं और कमांड के साथ प्राधिकरण संदर्भ से लिया गया उपयोगकर्ता पास करें। – Lightman