2014-06-29 5 views
9

डोमेन संचालित डिज़ाइन (एमवीसी फ्रेमवर्क में) में उपयोगकर्ता सत्र कैसे प्रबंधित किए जाते हैं?डोमेन संचालित डिजाइन में उपयोगकर्ता सत्रों को कैसे संभालें

मुझे User डोमेन ऑब्जेक्ट, UserRepository और UserService मिला है।

मैं अपने UserService वर्ग में उन लॉग में इस विधि मिल गया है।

public function login($email, $password, $remember = false) 
{ 
    $user = $this->userRepo->findByEmail($email); 

    if ($user && $user->getPassword() === $password) { 
     return $user; 
    } 

    return false; 
} 

मैं कैसे उन्हें सत्र के साथ में लॉग इन रहते हो?

मैं कैसे अपने आप एक सत्र प्रयोक्ता आईडी के आधार पर उपयोगकर्ता को लोड होगा?

किसी ने मुझसे कोड के साथ एक उदाहरण है कि कैसे मैं DDD में अपने आवेदन में उपयोगकर्ता को बनाए रखने सकता है दे सकते हैं?

उत्तर

1
if(!isset($_SESSION['user'])) { 
    if ($user && $user->getPassword() === $password) { 
     $_SESSION['user'] = $user; 
     return $user; 
    } 
} else { 
    return $_SESSION['user']; 
} 

शायद ऐसा कुछ। बस सुनिश्चित करें कि लॉग आउट समारोह पर अपने सत्र

8

एक DDD दृष्टिकोण से नष्ट सत्र के प्रबंधन के व्यवहार की एक अलग सेट किया गया है, उनके लिए एक समर्पित सेवा के योग्य है। तो ऐसी सेवा बनाएं।

आप उस सेवा को UserService पर निर्भरता के रूप में पास कर सकते हैं, इसलिए UserService प्रमाणीकरण जानकारी संग्रहीत करने के लिए सत्र प्रबंधक का उपयोग कर सकता है।

अभी तक बेहतर, प्रमाणीकरण की अवधारणा भी व्यवहार की एक अलग सेट के रूप में देखा जा सकता है, तो भी उस के लिए एक सेवा पैदा करते हैं। निर्भरता के रूप में इस 0 प्रमाणीकरण सेवा के लिए अपने UserService और सत्र प्रबंधक को पास करें। (इसलिए सत्र प्रबंधक अब UserService की निर्भरता नहीं है।)

लेकिन प्रमाणीकरण भी कई अलग-अलग हिस्सों में विभाजित किया जा सकता है, यह इस बात पर निर्भर करता है कि आप कितनी दूर जाना चाहते हैं।

दुर्भाग्यवश मैं आपको कोई कोड नहीं दिखा सकता, क्योंकि यह अत्यधिक निर्भर करेगा कि आप किस प्रकार के प्रमाणीकरण (HTTP बेसिक, फॉर्म लॉगिन, ओथ, इत्यादि), आप किस स्तर का अमूर्त करना चाहते हैं, और आपकी व्यक्तिगत प्राथमिकताओं।

लेकिन यदि आप देखना चाहते हैं कि एक जटिल प्रणाली कैसा दिख सकता है, तो सिम्फनी 2, here in the documentation और here on github के सुरक्षा घटक पर नज़र डालें।

और यदि आप इस घटक का उपयोग करने पर विचार करेंगे, तो आप इसका उपयोग कैसे कर सकते हैं इसके बारे में महसूस करने के लिए Silex implements it (github) पर देख सकते हैं।

साइड नोट

DDD के बारे में ज्यादा एक निश्चित तरीके से अपने कोड लिखने की तुलना में अधिक है। आप DDD जानने के लिए चाहते हैं, तो मैं सुझाव है कि आप Domain-Driven Design: Tackling Complexity in the Heart of Software (नीला पुस्तक), Implementing Domain-Driven Design (लाल किताब) को पढ़ने, या आप Domain Driven Design Quickly जो डाउनलोड के लिए उपलब्ध है के साथ की शुरुआत कर सकते हैं।

+1

मैं भी अत्यधिक अध्ययन Symfony सुरक्षा घटक (या SpringFramework (जावा) जिस पर यह आधारित है से वसंत सुरक्षा) के रूप में यह स्पष्ट संबंधों के साथ छोटे टुकड़ों में प्रमाणीकरण और प्राधिकरण के जटिल अवधारणा टूट जाती सलाह देते हैं। +1 अप – Crozin

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