يي إطار 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 

نموذج الجدول والمستخدمين ، وخصوصية هو أن هناك مجال حقوق:

 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/ar463057/


All Articles