首頁 後端開發 php教程 深入解析yii权限分级式访问控制的实现(非RBAC法)_php技巧

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

May 17, 2016 am 09:01 AM
yii 存取控制

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('*'),
         ),
     );

工作完成!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用Vue進行權限管理與存取控制 如何使用Vue進行權限管理與存取控制 Aug 02, 2023 pm 09:01 PM

如何使用Vue進行權限管理和存取控制在現代Web應用程式中,權限管理和存取控制是一項關鍵的功能。 Vue作為一種流行的JavaScript框架,提供了一種簡單而靈活的方式來實現權限管理和存取控制。本文將介紹如何使用Vue來實現基本的權限管理和存取控制功能,並附上程式碼範例。定義角色和權限在開始之前,首先需要定義應用程式中的角色和權限。角色是一組特定的權限集合,而

如何使用PHP框架Yii開發一個高可用的雲端備份系統 如何使用PHP框架Yii開發一個高可用的雲端備份系統 Jun 27, 2023 am 09:04 AM

隨著雲端運算技術的不斷發展,資料的備份已經成為了每個企業必須要做的事情。在這樣的背景下,開發一款高可用的雲端備份系統尤其重要。而PHP框架Yii是一款功能強大的框架,可以幫助開發者快速建立高效能的Web應用程式。以下將介紹如何使用Yii框架開發一款高可用的雲端備份系統。設計資料庫模型在Yii框架中,資料庫模型是非常重要的一環。因為資料備份系統需要用到很多的表和關

使用Go語言解決大規模存取控制問題 使用Go語言解決大規模存取控制問題 Jun 15, 2023 pm 02:59 PM

隨著網路的發展,存取控制問題越來越成為一個重要的議題。在傳統的權限管理中,一般採用角色授權或存取控制清單來實現對資源的控制。然而,這種方法往往無法適應大規模的存取控制需求,因為它難以靈活地實現對不同角色和資源的存取控制。針對這個問題,使用Go語言解決大規模存取控制問題成為了一種有效的方法。 Go語言是一種面向並發程式設計的語言,它有著出色的並發效能和快速的編譯

Nginx如何實現基於請求來源IP的存取控製配置 Nginx如何實現基於請求來源IP的存取控製配置 Nov 08, 2023 am 10:09 AM

Nginx如何實現基於請求來源IP的存取控製配置,需要具體程式碼範例在網路應用程式開發中,保護伺服器免受惡意攻擊是非常重要的一環。使用Nginx作為反向代理伺服器,我們可以透過設定IP存取控制,限制特定IP位址的存取權限,以提高伺服器的安全性。本文將介紹如何在Nginx中實現基於請求來源IP的存取控製配置,並提供具體的程式碼範例。首先,我們要編輯Nginx的設定文

Win10打不開存取控制編輯器 Win10打不開存取控制編輯器 Jan 03, 2024 pm 10:05 PM

win10無法開啟存取控制編輯器是一個不常見的問題,通常都是在外接硬碟和U盤中才會出現這個問題,其實解決方法非常的簡單,使用安全模式打開看下就行,下面來看看詳細的教程吧。 win10無法開啟存取控制編輯器1.登陸介面中,按住shift,點選按鈕,點選2.--,點選3.重新啟動後,按F5嘗試進入,看看是否能夠進入即可。 win10安全模式相關文章>>>如何進入win10安全模式<<<>>>win10安全模式怎麼修復系統<<<

深入探討Nginx的流量分析與門禁控制方法 深入探討Nginx的流量分析與門禁控制方法 Aug 05, 2023 pm 05:46 PM

深入探討Nginx的流量分析與存取控制方法Nginx是一款高效能的開源Web伺服器,其功能強大且可擴展,因此廣泛應用於互聯網領域。在實際應用中,我們通常需要對Nginx的流量進行分析以及對存取進行控制。本文將深入探討Nginx的流量分析和存取控制方法,並提供對應的程式碼範例。一、Nginx流量分析Nginx提供了許多內建變量,可用於分析流量。其中,常用

Symfony vs Yii2:哪個框架比較適合開發大型Web應用? Symfony vs Yii2:哪個框架比較適合開發大型Web應用? Jun 19, 2023 am 10:57 AM

隨著Web應用需求的不斷增長,開發者在選擇開發框架方面也越來越有選擇的空間。 Symfony和Yii2是兩個備受歡迎的PHP框架,它們都具有強大的功能和效能,但在面對需要開發大型網路應用程式時,哪個框架更適合呢?接下來我們將對Symphony和Yii2進行比較分析,以幫助你更好地進行選擇。基本概述Symphony是一個由PHP編寫的開源Web應用框架,它是建立

實現基於角色的存取控制(RBAC):使用PHP和RBAC 實現基於角色的存取控制(RBAC):使用PHP和RBAC Jun 20, 2023 pm 10:39 PM

隨著網路應用的普及,我們希望能夠在應用程式內部實現對資料的保護,以確保敏感資料不會亂用或不被竊取。其中之一的解決方案是使用基於角色的存取控制(RBAC)。基於角色的存取控制(RBAC)是建立在使用者和角色之間的關係上的一種存取控制模型。該模型的核心思想是將使用者的角色與存取控制操作連結起來,而不是將存取控制操作直接與使用者連結。這種方式提高了存取控制的靈活性,

See all articles