मैं इसे इस तरह से करूँगा।
table name: permission
columns: id, permission_name
और फिर मैं कई से कई संबंध तालिका का उपयोग करके उपयोगकर्ता को एकाधिक अनुमतियां असाइन कर सकता हूं
table name: user_permission
columns: permission_id, user_id
यह डिज़ाइन मुझे जितनी चाहें उतनी अनुमति जोड़ने की अनुमति देगा, और इसे जितने चाहें उतने उपयोगकर्ता को असाइन करेगा।
जबकि उपरोक्त डिज़ाइन आपकी आवश्यकता के अनुरूप है, मेरे पास अपने आवेदन में एसीएल को लागू करने का अपना तरीका है। मैं इसे यहां पोस्ट कर रहा हूं।
एसीएल के कार्यान्वयन का मेरा तरीका इस प्रकार है:
- उपयोगकर्ता को एक भूमिका सौंपी जाएगी (व्यवस्थापक, अतिथि, कर्मचारी, सार्वजनिक)
- एक भूमिका में उन्हें एक या कई अनुमतियां सौंपी जाएंगी (user_write, user_modify, report_read) आदि।
- उपयोगकर्ता के लिए अनुमति उस भूमिका से विरासत में ली जाएगी जिसमें वह है
- उपयोगकर्ता को भूमिका से विरासत में मिली अनुमति के अलावा मैन्युअल अनुमति के साथ सौंपा जा सकता है।
ऐसा करने के लिए मैं निम्नलिखित डेटाबेस डिजाइन के साथ आया हूं।
role
I store the role name here
+----------+
| Field |
+----------+
| id |
| role_name |
+----------+
permission:
I store the permission name and key here
Permission name is for displaying to user.
Permission key is for determining the permission.
+----------------+
| Field |
+----------------+
| id |
| permission_name |
| permission_key |
+----------------+
role_permission
I assign permission to role here
+---------------+
| Field |
+---------------+
| id |
| role_id |
| permission_id |
+---------------+
user_role
I assign role to the user here
+---------------+
| Field |
+---------------+
| id |
| user_id |
| role_id |
+---------------+
user_permission
I store the manual permission I may allow for the user here
+---------------+
| Field |
+---------------+
| id |
| user_id |
| permission_id |
+---------------+
यह मुझे एसीएल पर अधिक नियंत्रण देता है। मैं सुपरएडमिन को स्वयं अनुमति देने की अनुमति दे सकता हूं, इत्यादि। जैसा कि मैंने कहा कि यह सिर्फ आपको एक विचार देने के लिए है।