2012-04-24 6 views
5

सामान्य विवरणसिम्फनी 2 के साथ निम्न की तरह एक अनुमति प्रणाली कैसे बनाएं?

प्रणाली (नीचे दृश्य उदाहरण देखें) है, जबकि ग्राहकों को अनुमति नियमों को परिभाषित करने की क्षमता दे रही है (नीचे अनुमति नियम देखें) नेस्ट श्रेणियों में संगठित आइटम का एक बहुत संभाल चाहिए। इसे किसी भी आइटम से स्वतंत्र विभिन्न अनुमतियों को भी संभालना चाहिए (उदा। 'विशिष्ट पृष्ठ देख सकते हैं?' या 'नए सदस्यों को आमंत्रित कर सकते हैं?')।

सभी उपयोगकर्ता समूह में व्यवस्थित हैं। प्रत्येक उपयोगकर्ता का एक मुख्य समूह होता है जिसका वह संबंधित है, लेकिन उसके पास कुछ अतिरिक्त माध्यमिक समूह भी हो सकते हैं।

कुछ उपयोगकर्ताओं को सुपर-एडमिन के रूप में कॉन्फ़िगर किया जा सकता है और उन्हें कुछ भी करने की अनुमति दी जानी चाहिए।

यह तय करते एक उपयोगकर्ता कुछ करने के लिए अनुमति दी है, तो अनुमति विरासत के रूप में अनुवर्ती है:

  • मुख्य समूह की अनुमतियों
  • सभी अनुमतियों को उपयोगकर्ता के अतिरिक्त समूह
  • में से किसी से अनुमति की अनुमति दें के साथ शुरू
  • यदि परिभाषित किया गया है, तो उपयोगकर्ता विशिष्ट अनुमतियों को जांचें (ऊपर से स्वतंत्र रूप से अनुमति देने या अस्वीकार करने के लिए)।

    : उपयोगकर्ता विशिष्ट अनुमतियों ग्राहक विरासत इस्तेमाल कर सकते हैं जैसे कुछ कहने के लिए अगर वे परिभाषित नहीं कर रहे हैं जब समूह अनुमति को परिभाषित उपयोगकर्ता सिर्फ समूहों अनुमतियाँ

से अनुमति के वारिस, परिभाषित करने की जरूरत नहीं है,

  • उपयोगकर्ता की अनुमति दी ...
  • संपादकों उपयोगकर्ता + के सभी अनुमतियों ...
  • मध्यस्थ संपादकों के सभी अनुमतियों है + ... मैं डेटाबेस है कि वर्तमान उपयोगकर्ता को संपादित कर सकते हैं से पिछले 10 आइटम का अनुरोध करने में सक्षम होना चाहिए/दृश्य: - ...
  • व्यवस्थापक संपादकों + मध्यस्थ

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

अनुमति नियमों

नियम (आदि ... जैसे आइटम के मालिक के मुख्य समूह, निर्माण के समय, श्रेणी) आइटम के किसी भी संपत्ति पर निर्भर कर सकता है, कि जानकारी डेटाबेस में संग्रहित है।

नियम वर्तमान उपयोगकर्ता की किसी भी संपत्ति (जैसे साइन-अप तिथि, सदस्यों को आमंत्रित) पर निर्भर कर सकते हैं, अनुरोध की कार्रवाई (जैसे देखें, सूची, नाम बदलें, पूर्ववत करें आदि), और रन-टाइम पर पहले से ही उपलब्ध अन्य जानकारी (उदाहरण के लिए यूआरएल पैरामीटर, कोटा सीमाएं, आइटम की सामग्री, सर्वर लोड), वह जानकारी php स्क्रिप्ट के लिए उपलब्ध है।

नीचे नमूना नियम देखें।डेटाबेस स्कीमा के

दृश्य उदाहरण: (निश्चित रूप से इस स्कीमा का ही हिस्सा है, वहाँ:

Category 1 
    Nested Category A 
     item x 
    Nested Category B 
     Deeply Nested Category 
     item w 
     item y 
Category 2 
    item z 

वर्तमान में, डेटाबेस स्कीमा निम्नलिखित लेकिन मैं इसे बदल सकते हैं अगर यह आवश्यक है की तरह है

id | title | owner_id | category_id 
==================================== 
1 | item x | 2  | 3 
2 | item y | 1  | 4 
3 | item z | 3  | 2 
4 | item w | 1  | 5 
: अन्य टेबल और क्षेत्रों के साथ-साथ)

आइटम हैं

श्रेणियों:

id | parents | title 
===================================== 
1 | null | Category 1 
2 | null | Category 2 
3 | 1  | Nested Category A 
4 | 1  | Nested Category B 
5 | 1/4  | Deeply Nested Category 

उपयोगकर्ताओं:

id | name | group | all_groups | is_super_admin 
=============================================== 
1 | Tony | 5  | 5   | 1 
2 | John | 5  | 5,8,6  | 0 
3 | Mike | 4  | 4,7  | 0 
4 | Ryan | 6  | 6   | 0 

नमूना नियमों

निम्नलिखित नियम ठीक वास्तविक दुनिया के मामलों है कि लागू किया जाना चाहिए के नमूने हैं।

  • उपयोगकर्ता प्रस्तुत करने से 5 मिनट()
  • उपयोगकर्ता 'जॉन' के भीतर अपनी खुद आइटम संपादित अंदर 'श्रेणी 1' और उसके सभी नेस्टेड श्रेणियों सभी आइटम संपादित कर सकते हैं कर सकते हैं।
  • संपादक आइटम को छोड़कर सभी आइटम संपादित कर सकते हैं जिन्हें उनके स्वामी को सुपर व्यवस्थापक के रूप में चिह्नित किया गया है।

ध्यान दें कि इन नियमों का डेटाबेस स्तर में निर्णय लिया जा सकता है जैसे कि मेरे मामले में अधिकांश नियम।

कार्यान्वयन

मैं खोज की है जो सिम्फोनी डॉक्स, stackoverflow आदि कर रहे हैं मैं सबसे अच्छा तरीका है एक ऐसी संभालने के लिए नहीं मिल सका रोचक लेख और सुरक्षा और acls के विषय पर प्रश्न लेकिन का एक बहुत प्रणाली।

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

प्रश्न

मैं कैसे एक ऐसी प्रणाली लागू करने के लिए पूछ रहा हूँ, सामान्य विचार और आम साधारण मामलों के साथ सिम्फोनी प्रलेखन के लिए लिंक या अन्य संसाधनों के साथ उत्तर नहीं देते हैं। उत्तर देने से पहले कृपया मेरे मामले को पढ़ें और समझें।

+4

आप अपने सिस्टम के लिए एक उपयुक्त डिजाइन मिल गया है पर इन डॉक्स पढ़ने के लिए कस्टम भूमिका hierarhy परिभाषित कर सकते हैं? यदि आप इसे यहां पोस्ट कर सकते हैं? मैं कुछ इसी तरह के कार्यान्वयन के करीब आ रहा हूं। धन्यवाद! – mokagio

+1

क्षमा करें, लेकिन सिम्फनी के साथ काम करने वाले समाधान की खोज के दिनों के बाद मैंने छोड़ दिया ... – Xuni

+2

हाँ मैं भी ... हमने सिम्फनी एसीएल पर प्रेरित एक सरल कस्टम सिस्टम लागू किया और उनमें से कुछ मूल घटकों का उपयोग किया। मैं व्यक्तिगत रूप से वास्तव में निराश था। – mokagio

उत्तर

1

मुझे एहसास है कि यह प्रश्न पुराना है, लेकिन उत्तर सिम्फनी 2.3+ के लिए लागू है, इसलिए मैं इसे यहां पोस्ट करता हूं।

इस दृष्टिकोण के लिए आपको SecurityVoters जैसी चीजों का उपयोग करना चाहिए।

सुरक्षा मतदाताओं के साथ आप एक्सेस नियंत्रण के लिए किसी भी तर्क को लागू कर सकते हैं, जिसे आप कल्पना कर सकते हैं।

मतदाता की तरह

$this->get('security.authorization_checker')->isGranted('update',$post); 

काम करता है जो सभी मतदाताओं, जो एक पोस्ट संस्थाओं (डॉक्स देखें) काम करते हैं और चुने हुए रणनीति (सकारात्मक, आम सहमति, एकमत) के साथ उनके वोट को जोड़ सकते हैं जांच करेगा कि वर्तमान उपयोगकर्ता तय करने के लिए पोस्ट को अपडेट करने के लिए अधिकृत है (आपके पहले ट्यूल उदाहरण के लिए)

आप कई मतदाताओं को एकल कार्रवाई के लिए कार्यान्वित कर सकते हैं और परिणामी वोट तय करने के लिए रणनीति होव को परिभाषित कर सकते हैं।

सभी समूह और अनुमतियां जिन्हें आप भंडार में स्टोर कर सकते हैं और उन्हें मतदाता के अंदर सिद्धांत के साथ ला सकते हैं।

इसके अलावा, आप सुरक्षा को सरल बनाने से काम करता है

इसके अलावा SecurityComponent

+1

शीर्ष पर जाएं KnpUniversity https://knpuniversity.com/screencast/new-in-symfony3/voter एक संक्षिप्त ट्यूटोरियल के लिए जो सबसे महत्वपूर्ण चीजों को बताता है :-) – MauganRa

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