Yii फ्रेमवर्क 2 कस्टम अधिकार

Yii फ्रेमवर्क 2 - डेटाबेस के माध्यम से उपयोगकर्ता अधिकार।

हम एक नियंत्रक बनाते हैं जिसमें से सभी नियंत्रकों को विरासत में दिया जाएगा और इससे पहले कि - एक विधि जिसे कार्रवाई से पहले निष्पादित किया जाएगा।

PS: मॉडल और CRUD को Gii मॉड्यूल का उपयोग करके उत्पन्न किया जाना चाहिए।

<?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ namespace app\helper; use yii\web\Controller; use app\models\Users; use app\models\Rights; use Yii; class AppController extends Controller{ public function beforeAction($action){ $controller = $action->controller->id; //$action = $action->id; $rights = Rights::find()->where('controller = :controller', [':controller' => $controller])->one(); if(is_null($rights)){ echo 'controller dont have a rights'; exit; } $roles = explode(",",$rights->rights); $access = false; $userRole = "guest"; if(!\Yii::$app->user->isGuest){ $id = \Yii::$app->user->id; $user = Users::find()->where('id = :id', [':id' => $id])->one(); $userRole = $user->righgts; } foreach ($roles as $role){ if($role == $userRole){ $access = true; } } if(!$access){ $this->redirect(array('/site/login')); exit; } return parent::beforeAction($action); } } 

मॉडल और अधिकार तालिका:

 CREATE TABLE `rights` ( `id` int(11) NOT NULL AUTO_INCREMENT, `controller` varchar(255) NOT NULL, `action` varchar(255) NOT NULL, `rights` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 

मॉडल और उपयोगकर्ता तालिका, ख़ासियत यह है कि वहाँ एक righgts फ़ील्ड है:

 CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, `phone` varchar(22) NOT NULL, `password` varchar(64) NOT NULL, `righgts` varchar(60) NOT NULL, `verify_key` varchar(65) NOT NULL, `activated` int(11) NOT NULL, `recovery_key` varchar(65) NOT NULL, `recovery_key_life` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `auth_key` varchar(255) NOT NULL, `accessToken` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=37 DEFAULT CHARSET=utf8 

उपयोगकर्ता तालिका में, हमारे पास अधिकार क्षेत्र को बदलने की क्षमता है, जो नियंत्रक क्रियाओं तक पहुंच अधिकारों के लिए जिम्मेदार है।

छवि

अधिकार तालिका में हम लिखते हैं: नियंत्रक, कार्रवाई और भूमिकाएं (अधिकार, अधिकार) जिनकी उन तक पहुंच है।

छवि

एल्गोरिथ्म:

  1. मूल नियंत्रक डेटाबेस (अधिकार स्तंभ) से उपयोगकर्ता अधिकारों की जाँच करता है।
  2. पैरेंट कंट्रोलर को कॉल कंट्रोलर का नाम और कॉल किए गए एक्शन का नाम मिलता है।
  3. मूल नियंत्रक अधिकार तालिका तक पहुँचता है और जाँचता है कि नियंत्रक और क्रिया का उपयोग करने के लिए किन अधिकारों की आवश्यकता है।
  4. यदि उपयोगकर्ता अधिकार अधिकार तालिका में अधिकारों से मेल खाते हैं, तो कार्रवाई की जाती है; यदि नहीं, तो पुनर्निर्देशित किया जाता है।

अल्पविराम द्वारा अलग किए गए अधिकार तालिका में सूची अधिकार।

उपयोगकर्ता मॉड्यूल मानक अधिकारों के लिए उपयुक्त हैं, इस पद्धति का उपयोग व्यवस्थापक मॉड्यूल में करना अच्छा है।

मैं लेख लिखने और खुद को खूबसूरती से व्यक्त करने में माहिर नहीं हूं, मैंने सिर्फ तकनीकी सार को रेखांकित किया है, कृपया एक प्लस लगाएं - मैं बहुत सारी दिलचस्प चीजें लिखूंगा।

Source: https://habr.com/ru/post/hi463057/


All Articles