Rumah pembangunan bahagian belakang tutorial php 深入解析yii权限分级式访问控制的实现(非RBAC法)_php技巧

深入解析yii权限分级式访问控制的实现(非RBAC法)_php技巧

May 17, 2016 am 09:01 AM
yii kawalan capaian

yii framework 提供了2套权限访问系统,一套是简单的filter(过滤器)模式,另一套是复杂全面的RBAC模式,我这里要讲的是第一套(因为我也刚刚学到这里)。如 果你有研究过YII官方的demo blog,一定知道,比如,由gii自动生成的user模块,自动附带了简单的filter权限分配功能,具体细节请参照blog手册的“用户验证”一章 节,以及yii官方指南的“验证和授权”一章节。(注意,我这里所指的模块,只是我个人对与user有关的文件的统称,与yii文件系统的模块 (module)含义不同。)
关于权限分配的文件大多在controllers里,比如打开UserController.php文件你会看到2个类函数。

复制代码 代码如下:

public function filters()
     {
      return array(
       'accessControl',               // 实现CRUD操作的访问控制。
       'postOnly + delete',
         );
     }

 public function accessRules()              //这里就是访问规则的设置。
     {
      return array(
         array('allow',              // 允许所有用户执行index,view动作。
           'actions'=>array('index','view'),
           'users'=>array('*'),           
           ),                   
         array('allow',             // 只允许经过验证的用户执行create, update动作。
            'actions'=>array('create','update'),
            'users'=>array('@'),       // @号指所有注册的用户
             ),
         array('allow',             // 只允许用户名是admin的用户执行admin,delete动作
             'actions'=>array('admin','delete'),
             'users'=>array('admin'),
             ),                   //admin就是指用户名是admin的用户,以硬编码的形式分配用户权限。
             array('deny',           // 拒绝所有的访问。
             'users'=>array('*'),
             ),
         );
     }

关于更多的访问规则的设定请参照官方文件http://www.yiiframework.com/doc/api/1.1/CAccessControlFilter
好了,现在要开始按照我们自己的需求设置适合自己的权限分配了。我们希望filter访问控制模式能更完美一点,按照常识,我们希望它能按照数据库里user表里不同级别用户,实行不同的授权,而不是用硬编码的形式控制。

回到demo blog,我先对数据库的tbl_user表做修改,在原来的基础上加上role一项。对原来的用户信息记录添加role的value为"管理员"或"一般用户"。
然后依次执行以下3个步骤:
1. 创建组件WebUser,它是对CWebUser的扩展。
2. 修改config/main.php文件。
3.修改accessRules()。
具体细节如下:
1.WebUser.php 组件代码:
复制代码 代码如下:


 // this file must be stored in:
 // protected/components/WebUser.php

 class WebUser extends CWebUser {

   // Store model to not repeat query.
   private $_model;

   // Return first name.
   // access it by Yii::app()->user->first_name
   function getFirst_Name(){
     $user = $this->loadUser(Yii::app()->user->id);
     return $user->first_name;
   }

   // This is a function that checks the field 'role'
   // in the User model to be equal to 1, that means it's admin
   // access it by Yii::app()->user->isAdmin()
   function isAdmin(){
     $user = $this->loadUser(Yii::app()->user->id);
     if ($user==null)
         return 0;
     else
         return $user->role == "管理员";
   }

   // Load user model.
   protected function loadUser($id=null)
     {
         if($this->_model===null)
         {
             if($id!==null)
                 $this->_model=User::model()->findByPk($id);
         }
         return $this->_model;
     }
 }
 ?>


2.在config/main.php找到如下代码,添加标红色的代码。
复制代码 代码如下:

   'components'=>array(
        'user'=>array(
            // enable cookie-based authentication
            'allowAutoLogin'=>true,
             'class'=>'WebUser',
        ),

3.找到需要更改权限的controller类,对accessRules()函数做修改,比如对前文的accessRules()函数做如下修改:
复制代码 代码如下:

public function accessRules()  //这里就是访问规则的设置。     {
     return array(
         array('allow',                     // 允许所有用户执行index,view动作。
             'actions'=>array('index','view'),
             'users'=>array('*'),         //*号标识所有用户包括注册的、没注册的、一般的、管理员级的
         ),
         array('allow',                      // 只允许经过验证的用户执行create, update动作。
             'actions'=>array('create','update'),
             'users'=>array('@'),       // @号指所有注册的用户
         ),
         array('allow',                     // 只允许用户名是admin的用户执行admin,delete动作
             'actions'=>array('admin','delete'),
             'expression'=>'yii::app()->user->isAdmin()',
             //这样只有标识为“管理员”的用户才能访问admin,delete动作
         ),
         array('deny',  // 拒绝所有的访问。
             'users'=>array('*'),
         ),
     );

工作完成!
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan Vue untuk pengurusan kebenaran dan kawalan akses Cara menggunakan Vue untuk pengurusan kebenaran dan kawalan akses Aug 02, 2023 pm 09:01 PM

Cara menggunakan Vue untuk pengurusan kebenaran dan kawalan capaian Dalam aplikasi web moden, pengurusan kebenaran dan kawalan capaian ialah ciri kritikal. Sebagai rangka kerja JavaScript yang popular, Vue menyediakan cara yang mudah dan fleksibel untuk melaksanakan pengurusan kebenaran dan kawalan akses. Artikel ini akan memperkenalkan cara menggunakan Vue untuk melaksanakan pengurusan kebenaran asas dan fungsi kawalan akses, serta melampirkan contoh kod. Menentukan Peranan dan Kebenaran Sebelum anda bermula, anda perlu menentukan peranan dan kebenaran dalam aplikasi anda terlebih dahulu. Peranan ialah set kebenaran khusus, dan

Cara menggunakan rangka kerja PHP Yii untuk membangunkan sistem sandaran awan yang sangat tersedia Cara menggunakan rangka kerja PHP Yii untuk membangunkan sistem sandaran awan yang sangat tersedia Jun 27, 2023 am 09:04 AM

Dengan perkembangan berterusan teknologi pengkomputeran awan, sandaran data telah menjadi sesuatu yang mesti dilakukan oleh setiap perusahaan. Dalam konteks ini, amat penting untuk membangunkan sistem sandaran awan yang sangat tersedia. Rangka kerja PHP Yii ialah rangka kerja berkuasa yang boleh membantu pembangun membina aplikasi web berprestasi tinggi dengan cepat. Berikut akan memperkenalkan cara menggunakan rangka kerja Yii untuk membangunkan sistem sandaran awan yang sangat tersedia. Mereka bentuk model pangkalan data Dalam rangka kerja Yii, model pangkalan data adalah bahagian yang sangat penting. Kerana sistem sandaran data memerlukan banyak jadual dan hubungan

Bagaimana Nginx melaksanakan konfigurasi kawalan akses berdasarkan IP sumber permintaan Bagaimana Nginx melaksanakan konfigurasi kawalan akses berdasarkan IP sumber permintaan Nov 08, 2023 am 10:09 AM

Cara Nginx melaksanakan konfigurasi kawalan akses berdasarkan IP sumber permintaan memerlukan contoh kod khusus Dalam pembangunan aplikasi rangkaian, melindungi pelayan daripada serangan berniat jahat adalah langkah yang sangat penting. Menggunakan Nginx sebagai pelayan proksi terbalik, kami boleh mengkonfigurasi kawalan akses IP untuk menyekat akses kepada alamat IP tertentu untuk meningkatkan keselamatan pelayan. Artikel ini akan memperkenalkan cara melaksanakan konfigurasi kawalan akses berdasarkan IP sumber permintaan dalam Nginx dan memberikan contoh kod khusus. Pertama, kita perlu mengedit fail konfigurasi Nginx

Gunakan bahasa Go untuk menyelesaikan masalah kawalan akses berskala besar Gunakan bahasa Go untuk menyelesaikan masalah kawalan akses berskala besar Jun 15, 2023 pm 02:59 PM

Dengan perkembangan Internet, isu kawalan akses semakin menjadi topik penting. Dalam pengurusan kebenaran tradisional, kebenaran peranan atau senarai kawalan akses biasanya digunakan untuk mengawal sumber. Walau bagaimanapun, kaedah ini selalunya tidak dapat menyesuaikan diri dengan keperluan kawalan akses berskala besar kerana sukar untuk melaksanakan kawalan akses secara fleksibel untuk peranan dan sumber yang berbeza. Untuk menyelesaikan masalah ini, menggunakan bahasa Go untuk menyelesaikan masalah kawalan akses berskala besar telah menjadi kaedah yang berkesan. Bahasa Go ialah bahasa untuk pengaturcaraan serentak Ia mempunyai prestasi konkurensi yang sangat baik dan penyusunan pantas.

Editor Kawalan Akses tidak boleh dibuka dalam Win10 Editor Kawalan Akses tidak boleh dibuka dalam Win10 Jan 03, 2024 pm 10:05 PM

Ketidakupayaan untuk membuka editor kawalan akses dalam win10 adalah masalah yang jarang berlaku. Masalah ini biasanya berlaku dalam pemacu keras luaran dan pemacu kilat USB lihat butiran di bawah. Win10 tidak boleh membuka editor kawalan akses 1. Dalam antara muka log masuk, tahan shift, klik butang, klik 2.--, klik 3. Selepas memulakan semula, tekan F5 untuk cuba masuk dan lihat jika anda boleh masuk. Artikel berkaitan win10 safe mode>>>Cara masuk win10 safe mode<<<>>>Cara baiki sistem dalam win10 safe mode<<<

Penerokaan mendalam tentang analisis trafik Nginx dan kaedah kawalan akses Penerokaan mendalam tentang analisis trafik Nginx dan kaedah kawalan akses Aug 05, 2023 pm 05:46 PM

Perbincangan mendalam tentang analisis trafik dan kaedah kawalan akses Nginx ialah pelayan web sumber terbuka berprestasi tinggi Ia berkuasa dan boleh skala, jadi ia digunakan secara meluas dalam bidang Internet. Dalam aplikasi praktikal, kita biasanya perlu menganalisis trafik Nginx dan mengawal akses. Artikel ini akan menyelidiki analisis trafik Nginx dan kaedah kawalan akses serta memberikan contoh kod yang sepadan. 1. Analisis trafik Nginx Nginx menyediakan banyak pembolehubah terbina dalam yang boleh digunakan untuk menganalisis trafik. Antaranya, biasa digunakan

Symfony vs Yii2: Rangka kerja manakah yang lebih baik untuk membangunkan aplikasi web berskala besar? Symfony vs Yii2: Rangka kerja manakah yang lebih baik untuk membangunkan aplikasi web berskala besar? Jun 19, 2023 am 10:57 AM

Memandangkan permintaan untuk aplikasi web terus berkembang, pembangun mempunyai lebih banyak pilihan dalam memilih rangka kerja pembangunan. Symfony dan Yii2 ialah dua rangka kerja PHP yang popular Kedua-duanya mempunyai fungsi dan prestasi yang berkuasa, tetapi apabila berhadapan dengan keperluan untuk membangunkan aplikasi web berskala besar, rangka kerja manakah yang lebih sesuai? Seterusnya kami akan menjalankan analisis perbandingan Symphony dan Yii2 untuk membantu anda membuat pilihan yang lebih baik. Gambaran Keseluruhan Asas Symphony ialah rangka kerja aplikasi web sumber terbuka yang ditulis dalam PHP dan dibina di atas

Melaksanakan Kawalan Akses Berasaskan Peranan (RBAC): Menggunakan PHP dan RBAC Melaksanakan Kawalan Akses Berasaskan Peranan (RBAC): Menggunakan PHP dan RBAC Jun 20, 2023 pm 10:39 PM

Dengan populariti aplikasi Internet, kami berharap dapat melindungi data dalam aplikasi untuk memastikan data sensitif tidak disalahgunakan atau dicuri. Salah satu penyelesaiannya ialah menggunakan kawalan akses berasaskan peranan (RBAC). Kawalan capaian berasaskan peranan (RBAC) ialah model kawalan capaian berdasarkan perhubungan antara pengguna dan peranan. Idea teras model ini adalah untuk memautkan peranan pengguna kepada operasi kawalan akses, dan bukannya memautkan operasi kawalan akses terus kepada pengguna. Pendekatan ini meningkatkan fleksibiliti kawalan akses,

See all articles