मुझे अक्सर निम्नलिखित परिदृश्य का सामना करना पड़ता है जहां मुझे कई अलग-अलग प्रकार की अनुमतियां प्रदान करने की आवश्यकता होती है। मैं मुख्य रूप से एसक्यूएल सर्वर 2000 के साथ एएसपी.NET / VB.NET का उपयोग करता हूं।
परिदृश्य
मैं एक गतिशील अनुमति प्रणाली प्रदान करना चाहता हूं जो विभिन्न मानकों पर काम कर सके। आइए मान लें कि मैं या तो एक विभाग या सिर्फ एक विशिष्ट व्यक्ति को आवेदन के लिए उपयोग करना चाहता हूं। और दिखाओ कि हमारे पास कई अनुप्रयोग हैं जो बढ़ते रहते हैं।
अतीत में, मैंने निम्नलिखित दो तरीकों में से एक चुना है जिसे मैं जानता हूं।
1) पैरामीटर को लागू करने के तरीके को निर्धारित करने के लिए उपयोग किए जाने वाले विशेष कॉलम के साथ एक एकल अनुमति तालिका का उपयोग करें। इस उदाहरण में विशेष कॉलम टाइपआईडी और टाइपएक्सआईडीआईडी हैं। एसक्यूएल इस तरह कुछ दिखता है।
SELECT COUNT(PermissionID)
FROM application_permissions
WHERE
(TypeID = 1 AND TypeAuxID = @UserID) OR
(TypeID = 2 AND TypeAuxID = @DepartmentID)
AND ApplicationID = 1
2) प्रत्येक प्रकार की अनुमति के लिए मैपिंग टेबल का उपयोग करें, फिर उन सभी को एक साथ जोड़ना।
SELECT COUNT(perm.PermissionID)
FROM application_permissions perm
LEFT JOIN application_UserPermissions emp
ON perm.ApplicationID = emp.ApplicationID
LEFT JOIN application_DepartmentPermissions dept
ON perm.ApplicationID = dept.ApplicationID
WHERE [email protected]
AND ([email protected] OR [email protected] OR
(emp.UserID IS NULL AND dept.DeptID IS NULL)) AND ApplicationID = 1
ORDER BY q.QID ASC
मेरे विचार
मुझे आशा है कि उदाहरण समझ में आएंगे। मैंने उन्हें एक साथ दबाया।
पहले उदाहरण के लिए कम काम की आवश्यकता है, लेकिन उनमें से कोई भी सर्वश्रेष्ठ जवाब की तरह महसूस नहीं करता है। क्या इसे संभालने का कोई बेहतर तरीका है?