2009-02-13 17 views
6

मैं उस वेब ऐप के बारे में सोच रहा हूं जिसे मैं विकसित करना शुरू कर रहा हूं और सोच रहा हूं कि मेरा सामान्य दृष्टिकोण बेहतर हो सकता है या नहीं।मुझे अपने एसीएल को वेब एप्लिकेशन में कैसे कार्यान्वित किया जाना चाहिए?

मेरे पिछले कुछ ऐप्स में मैंने भूमिकाओं (जैसे CREATE POST, EDIT POST इत्यादि) की एक तालिका (नीचे देखें) बनाई है) जिनमें प्रत्येक के पास एक बिटफील्ड लागू होता है, इसलिए मैं पंजीकरण में उपयोगकर्ता को कुछ अधिकार निर्दिष्ट कर सकता हूं और बाद में उन्हें जांचें (उदाहरण के लिए $user->hasRight(CREATE_POST))।

मुझे आश्चर्य है कि इसके लिए बेहतर दृष्टिकोण है या नहीं। यह निश्चित रूप से भ्रमित है जब अधिकार उपयोगकर्ता से विशेष रूप से लिंक नहीं होते हैं (मेरे पास एक सारणी हो सकती है जहां प्रत्येक अधिकार एक बूलियन कॉलम होता है लेकिन यह केवल एक छोटे से सुधार की तरह लगता है) - और अगर मैं कुछ बदलता हूं तो क्या होता है?

मैं मानक पुस्तकालयों का उपयोग नहीं कर रहा हूं (ऐप स्वयं मेरे लिए एक सीखने का अनुभव है: पोस्टग्रेस्क्ल, गिट इत्यादि का उपयोग करना) हालांकि मैं अपने आप को बनाने के लिए प्रेरणा लेने के लिए पूरी तरह से खुश हूं - इसलिए यदि वहां है कुछ विशेष जो आपको लगता है कि मुझे एक नज़र डालना चाहिए कृपया मुझे कहना चाहिए :)

+0

इसके अतिरिक्त: यह एक PHP अनुप्रयोग के लिए होगा, लेकिन यदि रूबी ऑन रूल्स में एक महान अभ्यास किया गया है, तो मुझे यकीन है कि मैं इसे समझ सकता हूं :) – Ross

उत्तर

4

यह मूल रूप से वही दृष्टिकोण है जो मैं अपने स्वयं के वेब ऐप्स में लेता हूं (और कुछ परीक्षण और त्रुटि मेरे लिए उसमें गई है)। एकमात्र अंतर यह है कि, मैं संभवतः एक तालिका का उपयोग करता हूं जिसमें कॉलम के रूप में अलग-अलग अनुमतियां होती हैं, ताकि यदि आप बाद में और अनुमतियां जोड़ना चाहते हैं, तो आप कर सकते हैं। एक पूर्णांक में बिट्स का उपयोग करने से आप निश्चित संख्या में अनुमतियों को सीमित कर सकते हैं, अर्थात् पूर्णांक में मौजूद कई बिट्स। आम तौर पर यह 32 होगा जो मुझे लगता है कि शायद पर्याप्त है, लेकिन मैं खुद को इस तरह सीमित नहीं करना पसंद करता हूं।

क्या इसके लायक है के लिए, वह भी मॉडल है कि phpBB उपयोग करता है (तालिका स्तंभ के रूप में अनुमति नहीं) है, और अगर यह यकीनन सबसे लोकप्रिय पीएचपी वेब ऐप्लिकेशन के लिए काफी अच्छा है, यह शायद काफी अच्छा आप के लिए ;-) है

+1

मुझे एसीएल के लिए टेबल का उपयोग करने का विचार पसंद है। यू लगता है कि आप मुझे सलाह दे सकते हैं कि एसीएल प्राप्त करने के लिए इसे सही तरीके से कैसे डिजाइन किया जाए। तो मेरे पास टेबल 'प्रोजेक्ट' है जिसमें' ड्रॉइंग 'और एक टेबल यूजर के साथ एक से अधिक रिश्ते हैं। मान लें कि हमारे पास 'ए' और' बी 'परियोजनाएं हैं, जिनमें इसमें कई चित्र हैं।मैं इसे कैसे डिज़ाइन कर सकता हूं, मैं 1 उपयोगकर्ता को केवल ए देखने के लिए अनुमति दे सकता हूं, केवल एक उपयोगकर्ता को देखने के लिए एक उपयोगकर्ता, और 1 उपयोगकर्ता दोनों को देख सकता है। –

1

मुझे यकीन है कि आपको पहले ही phpgacl मिल गया है, लेकिन यदि आपके पास नहीं है तो यहां एक लिंक है। यह आपके सिर को पहले से लपेटने के लिए थोड़ा मोटा हो सकता है, और निश्चित रूप से पुस्तकालय एक परियोजना में लागू करने के लिए मुश्किल (समय लेने वाला) है, लेकिन दस्तावेज़ीकरण और डेमो उत्कृष्ट संदर्भ बिंदु हैं।

PHP Generic Access Control Lists

+0

मैंने नहीं किया लेकिन यह निश्चित रूप से दिलचस्प लग रहा है। – Ross

4

आप स्प्रिंग सुरक्षा (पूर्व Acegi) है, जो एक व्यापक रूप से इस्तेमाल जावा एसीएल रूपरेखा है के प्रलेखन पर एक नज़र ले सकता है।

दस्तावेज़ीकरण पूर्ण है और बॉट प्रमाणीकरण और प्राधिकरण के डिजाइन में किए गए विभिन्न विचारों का भी वर्णन करता है। जावा का उपयोग किए बिना भी यह योग्य पढ़ने योग्य है।

आप एक सिंहावलोकन प्राप्त करने के लिए index page देख सकते हैं और एसीगी क्या करता है (और नहीं) की एक छाप। आप authorization concepts या यहां तक ​​कि database schema पर भी जा सकते हैं।

+0

स्प्रिंग सिक्योरिटी के लिए साइट लेआउट बदल गया है, इसलिए अपडेट किए गए लिंक की सूची यहां दी गई है: [इंडेक्स पेज] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity.html) , [एसीएल अवधारणाओं] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/domain-acls.html) और [स्कीमा] (http://static.springsource.org /spring-security/site/docs/3.1.x/reference/appendix-schema.html) –

1

Zend Framework में ACL है जो आप जो करने की कोशिश कर रहे हैं उसके समान है।

1

सामान्य रूप से वेब अनुप्रयोगों में एसीएल दृष्टिकोण पर चर्चा की गई है, उदाहरण के लिए here

+0

कृपया केवल उत्तर लिंक से बचें। यदि लिंक तोड़ता है तो उत्तर अनुपयोगी हो जाता है। –