की रिपोजिटरी परत में प्रमाणीकरण करने के लिए पैटर्न मेरे पास एक रजिस्ट्री परत के साथ एक विंडोज प्रमाणीकृत एमवीसी अनुप्रयोग है। डेटाबेस के साथ नियंत्रक द्वारा सभी बातचीत भंडार के माध्यम से किया जाता है। प्रत्येक नियंत्रक भंडार के लिए एक संदर्भ है:एमवीसी अनुप्रयोग
public class PostController : Controller
{
private Repository db = new Repository();
[HttpPost]
public ActionResult DeletePost(int id)
{
// Authorize that the user is allowed to delete this post...
db.DeletePost(id);
}
}
मेरा प्रश्न वहाँ भंडार परत में मेरे प्राधिकरण के तर्क को स्थानांतरित करने के लिए एक अच्छा तरीका है कि क्या है। मैं Repository.DeletePost()
फ़ंक्शन को प्रमाणीकृत उपयोगकर्ता द्वारा बनाए गए पोस्ट को हटाने से इनकार करने के लिए चाहता हूं। समस्या यह है कि मेरा भंडार नहीं जानता कि प्रमाणीकृत उपयोगकर्ता कौन है। नियंत्रक जानता है (Controller.User
के माध्यम से)।
Repository
निर्माता में Controller.User
पासिंग काम नहीं करता, क्योंकि Controller.User
जाहिरा तौर पर समय निर्धारित नहीं है जब निर्माता कहा जाता है।
कैसे मैं कौन प्रमाणित उपयोगकर्ता की Repository
सूचित कर सकते हैं? क्या प्रत्येक कार्रवाई के भीतर Repository
बनाने के लिए सबसे अच्छा होगा? या क्या यह भंडार परत में इसे संभालने का बुरा विचार है?
db.DeletePostForUser(id, User.Identity.UserId);
फिर अपने भंडार में
:
यह वास्तव में मैं कर रहा हूं, लेकिन मुझे लगता है कि इसमें पर्याप्त "decoupling" नहीं है क्योंकि अब हमारे भंडार हमारे उपयोगकर्ता से बंधे हैं, जो किसी प्रकार का व्यवस्थापक हो सकता है जो तब तक कुछ भी करने में सक्षम नहीं होगा जब तक आप खाते नहीं थे इसके लिए हर कदम पर – Worthy7