2010-01-05 15 views
6

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

मुझे आश्चर्य है कि "पहुंच स्तर" को स्टोर करने का सबसे अच्छा तरीका क्या है?

एक तरीका मैं पहुंच स्तर को संग्रहीत करने के बारे में सोच रहा हूं, एक पूर्णांक के रूप में है, और सी # "झंडे" का उपयोग करके कई एक्सेस स्तरों को गठबंधन किए बिना फ़ील्ड के गुच्छा की आवश्यकता है, क्या यह बुद्धिमान है?

Create = 1 
Read = 2 
Update = 4 
Delete = 8 
FullAcc = 16 

अन्य विकल्प मैं सोच रहा हूँ, कम elegent महसूस करता है, लेकिन मैंने देखा है कि यह एक बहुत कुछ किया गया है:

Read/Write = 1 
R/W + Delete= 2 
Full Access = 3 

कारण मैं सोच रहा हूँ, कि यह यह की तरह लगता है है दूसरी विधि में अतिरिक्त आइटम जोड़ने के लिए और अधिक आसान होगा, लेकिन किसी बिंदु पर, यह बनाए रखने के लिए गधे में दर्द हो जाएगा। आपके क्या विचार हैं?

उत्तर

5

मैंने हमेशा झंडे का उपयोग करके पहला दृष्टिकोण पसंद किया है। खतरा यह है कि आपको अनुमतियों के बहुत से स्तर मिलते हैं और आपको अपने enum को विस्तारित करना होगा और बड़ी संख्याओं का उपयोग शुरू करना होगा और इसके लिए शायद आपके डेटाबेस में डेटा प्रकार को बड़े int में बदलना होगा। हालांकि, अनुमतियों की तरह कुछ के लिए विकल्पों की संख्या काफी सीमित होना चाहिए। एक सुझाव जो मैं करता हूं वह है कि पूर्ण एसीसी को एक अलग इकाई के बजाय बनाएं, पढ़ें, अपडेट करें और हटाएं। इस तरह आपको यह जांचना नहीं होगा कि किसी उपयोगकर्ता को अपडेट करने की कोशिश कर रहे हैं या नहीं, जब उपयोगकर्ता को अपडेट करने की कोशिश कर रहे हैं या नहीं।

3

मैं विकल्प # 1 के साथ जाऊंगा क्योंकि यह मुझे प्रत्येक प्रकार की पहुंच के लिए व्यक्तिगत झंडे देता है।

मैं यह भी सिफारिश करता हूं कि आप टाइमस्टैम्प के साथ परिवर्तनों का इतिहास संग्रहीत करें।

1

मैं enum मार्ग जाना होगा। इसकी दृढ़ता से टाइप किया गया है, डीबी और कोड (इन्ट्स और एनम्स अच्छी तरह से कास्ट) के बीच उचित रूप से अच्छी तरह से स्थानांतरित होता है, आप सुरक्षा अधिकारों को गठबंधन करने के लिए फ्लैगएट्रिब्यूट का उपयोग कर सकते हैं, और जब संस्करण संस्करणों की बात आती है तो enums बहुत लचीला होते हैं (जब तक आप हटा नहीं देते या पहले परिभाषित enum मानों का नाम बदलें)।

1

आपके 'झंडे' विचार अधिक लचीला है, जो आपको कभी भी आवश्यक होने पर अधिकारों के संयोजन की अनुमति देता है। 'FullAcc' आइटम अपने enum में एक विशिष्ट संख्या हालांकि, के रूप में नहीं परिभाषित किया जाना चाहिए - यह (कुछ बाहर छोड़ दिया साथ, इस तरह) एक साथ or'd अन्य झंडे का एक संयोजन होना चाहिए:

enum Rights { Create, read, Update, FullAcc = Create | Read | Update } 

केवल दर्द जो मैं देखता हूं वह यह है कि यदि आप enum में अधिक आइटम जोड़ते हैं, तो आपको FullAcc आइटम को संशोधित करना होगा, और फिर डीबी में अपने FullAcc रिकॉर्ड की पहचान करें और ध्वज मान अपडेट करें।

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