2015-10-14 9 views
6

निम्नलिखित परिदृश्य:अंतर्निहित आरबीएसी का उपयोग करें या खुद का निर्माण करें?

मेरे पास Yii2 ' उन्नत टेम्पलेट में एक बहु किरायेदार वेब एप्लिकेशन है। - बैकएंड
- डैशबोर्ड
- दृश्यपटल

प्रत्येक पोर्टल प्रमाणीकरण के लिए अपने स्वयं के उपयोगकर्ता टेबल है
:

यह आवेदन तीन पोर्टल है।
(-frontend_user,
-dashboard_user,
-backend_user)

दृश्यपटल और डैशबोर्ड, अंत में किरायेदार के नाम के साथ पहुँच सकते हैं जैसे:

एक उपयोगकर्ता डैशबोर्ड या दृश्यपटल मैं में प्रवेश करने की कोशिश करता है जांच करनी है कि क्या उन्हें लॉगिन करने का अधिकार है या नहीं। यह आकस्मिकता तालिका (उदा .: dashboard_user_tenant)

अब मैं डैशबोर्ड आवेदन के लिए एक RBAC निर्माण करना चाहते हैं के माध्यम से होता है।

लेकिन भूमिकाओं को डैशबोर्ड उपयोगकर्ता पर नहीं लटकाया जाना चाहिए, लेकिन डैशबोर्ड_यूसर_टेनेंट (आकस्मिक तालिका) पर, क्योंकि प्रत्येक किरायेदार के डैशबोर्ड में अधिकार बदल सकते हैं।

वाईआई 2 की अपनी आरबीएसी प्रणाली है, लेकिन जैसा कि मैं अब तक समझता हूं, यह मेरी आवश्यकताओं पर फिट नहीं है।

वाईआई 2 के आरबीएसी को अनुकूलित करने की कोई संभावना है या क्या यह मेरा खुद का कस्टम समाधान बनाने के लिए बेहतर है? शायद मेरा खुद का घटक?

मुझे आशा है कि मेरे विवरण काफी स्पष्ट :)

उत्तर

3

मैं अपनी परियोजनाओं में से एक में एक ऐसी ही इच्छा थी, लेकिन मैं अपने पूर्ण RBAC प्रणाली का निर्माण नहीं किया है, बजाय मैं भूमिकाओं के लिए जाँच का एक तरीका अधिलेखित कर दिया

मेरे उपयोगकर्ता घटक वर्ग में, मैं \ yii \ web \ उपयोगकर्ता का विस्तार करता हूं, और उस वर्ग के() फ़ंक्शन को ओवरराइट भी करता हूं। इससे मुझे उपयुक्त अनुमतियों की जांच करने के अपने तरीके का उपयोग करने देता है। ": पहुँच उपयोगकर्ताओं", "उन: संपादित करें", आदि

वे सभी एक निश्चित उपयोगकर्ता स्तर है उदाहरण

<?php 

namespace app\modules\users\models; 

use Yii; 
use yii\web\User as WebUser; 

use app\modules\users\models\UserPermissionManager; 

class User extends WebUser 
{ 
    public function can($operation, $params = [], $allowCaching = true) 
    { 
     if(Yii::$app->user->isGuest) 
     { 
      return false; 
     } 

     return (new UserPermissionManager())->has($operation); 
    } 
} 

UserPermissionManager कक्षा में के लिए, यह एक डेटाबेस तालिका है कि इस तरह के रूप में अनुमतियों से भरा हुआ है प्रश्नों उन्हें सौंपा गया जो उपयोगकर्ता स्तर से संबंधित है जो मैंने अपने उपयोगकर्ता डेटाबेस तालिका में सेट किया है।

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

यह एक पोस्ट में पूरी तरह से समझाने के लिए काफी बड़ी प्रणाली है, लेकिन मुझे आशा है कि इससे थोड़ा सा मदद मिलेगी, मुझे यह बताने में संकोच न करें कि मैं कुछ भी बेहतर समझा सकता हूं!

+0

आपके उत्तर के लिए धन्यवाद! मुझे लगता है मुझे एक समान तरीके से जाना है। 'कैन-फ़ंक्शन' को ओवरराइट करना एक अच्छा विचार है। –

+0

कोई चिंता नहीं, मुझे यह वास्तव में उपयोगी लगता है क्योंकि यह आपको यह निर्धारित करने देता है कि उपयोगकर्ता जो भी तरीका चाहते हैं उसका उपयोग कर पृष्ठों तक पहुंच सकते हैं या नहीं! अगर आपको कुछ और चाहिए तो मुझे बताने में संकोच न करें! – Lynch

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