php प्रतिष्ठा के आधार पर अनुमतियों को लागू करना




mysql sql (3)

मैं दो टेबल बनाऊंगा; उपयोगकर्ता और रैंक।

User
-----
id
username
rankID


Ranks
------
id
makeChanges
acceptChanges
changePermissions
view

फिर आप रैंकों तालिका में इच्छित विभिन्न रैंक बनाएं और उपयोगकर्ताओं के रैंक को उसी अनुरूप मिलान करें जो आप चाहते हैं। प्रत्येक फ़ील्ड को 0 या 1 के मान में रैंक्स तालिका में सेट करना सुनिश्चित करें; 0 की क्षमता और 1 विकल्प नहीं होने से।

संपादित करें यदि आप डेटाबेस के बिना ऐसा करने जा रहे थे, तो आप इसे PHP5 में कक्षाओं या उदाहरणों के साथ भी दे सकते हैं। उदाहरण के लिए, मान लें कि आपने अपनी मूल पोस्ट में उन प्रत्येक चीजों के लिए एक नाम निर्धारित किया था:

Creator - make changes, accept changes, change permissions
Reviewer - Accept changes
Editor - Make changes
Regular - View

तब आप नीचे जैसा कुछ कर सकते थे। (डेटाबेस तरीका स्पष्ट रूप से एक बेहतर तरीका होगा, लेकिन यह सिर्फ एक उदाहरण है।)

class Regular
{
    public function View()
    {
        //Do the view stuff in here
    }
}

class Editor extends Regular implements Edit
{

}

class Reviewer extends Regular implements Review
{

}

interface Review
{
    public function AcceptChanges()
    {
        //Do the accept changes here
    }
}

interface Edit
{
    public function MakeChanges()
    {
        //Do the make changes stuff here
    }
}


class Creator extends Regular implements Edit, Review
{
    public function ChangePermissions()
    {
        //Do the change permissions stuff here
    }
}

मैं एक वेबसाइट बना रहा हूं जिसमें प्रत्येक उपयोगकर्ता या उपयोगकर्ताओं के समूह के लिए परियोजनाएं, उपयोगकर्ता और अनुमतियां हैं। यह एक सामुदायिक सहयोग उपकरण क्या है, और मेरे पास 4 अलग-अलग अनुमतियां हैं:

  • निर्माता - परिवर्तन करें, परिवर्तन स्वीकार करें, अनुमतियां बदलें
  • परिवर्तन स्वीकार करें
  • परिवर्तन करें
  • राय

मैं एक डेटाबेस में, उपयोगकर्ताओं के समूहों के लिए इस तरह की अनुमति प्रणाली को कैसे लागू कर सकता हूं?

संपादित करें: समूह / अनुमतियां प्रतिष्ठा द्वारा परिभाषित की जाती हैं, जैसे StackOverflow पर।

संपादित 2 - अधिक विवरण में: प्रत्येक फ़ाइल को एक अनुमति की आवश्यकता होती है, परियोजनाओं को नई बनाई गई फ़ाइलों के लिए डिफ़ॉल्ट अनुमतियों की आवश्यकता होती है, और मुझे MySQL डेटाबेस अनुमतियाँ भी सेट करने की आवश्यकता होती है।


user_table
id, etc

permission table
id, user_id, permission_type

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

इसे एक कदम आगे बढ़ाने के लिए, आप प्रत्येक प्रकार की अनुमति को बाइनरी नंबर बना सकते हैं। इस तरह से आप बिटवाइज़ ऑपरेटर्स का उपयोग करके एक पूर्णांक द्वारा अनुमतियों का एक सेट बना सकते हैं।

उदाहरण के लिए यदि आपके पास स्थिरांक थे

PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4

आप इन मूल्यों को एक बिटवाइजर ऑपरेटर का उपयोग करके एक पूर्णांक में जोड़ सकते हैं "|"

(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions

फिर यह जांचने के लिए कि क्या उनके पास एक विशिष्ट अनुमति है, बिटवाइज़र ऑपरेटर "और" का उपयोग करें

($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true

यदि आपने ऐसा किया है, तो आपको अनुमतियों के प्रत्येक सेट के लिए केवल एक db रिकॉर्ड की आवश्यकता होगी।


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





permissions