1. 程式人生 > >訪問控制過濾器(Access Control Filter)

訪問控制過濾器(Access Control Filter)


訪問控制過濾器是檢查當前使用者是否能執行訪問的controller action的初步授權模式

這種授權模式基於使用者名稱客戶IP地址訪問型別

訪問控制過濾器,適用於簡單的驗證

需要複雜的訪問控制,需要使用將要講解到的基於角色訪問控制(role-based access (RBAC))。


在控制器(controller)裡過載CController::filters方法,設定訪問過濾器來控制訪問動作(看 Filter 瞭解更多過濾器設定資訊)。
class PostController extends CController
{
......
public function filters()
    {
        return array(
            'accessControl

',
        );
    }
}
在上面,設定的access control過濾器將應用於PostController裡每個動作。

過濾器具體的授權規則通過過載控制器的CController::accessRules方法來指定。
class PostController extends CController
{
    ......
    public function accessRules()
    {
        return array(
            array('deny',
                'actions'=>array('create', 'edit'),
                'users'=>array('?'),
            ),
            array('allow',
                'actions'=>array('delete'),
                'roles'=>array('admin'),
            ),
            array('deny',
                'actions'=>array('delete'),
                'users'=>array('*'),
            ),
        );
    }
}
上面設定了三個規則,每個用個數組表示。

陣列的第一個元素不是'allow'就是'deny',其他的是名-值成對形式設定規則引數的。

上面的規則這樣理解:

create和edit動作不能被匿名執行;

delete動作可以被admin角色的使用者執行;

delete動作不能被任何人執行。


訪問規則是一個一個按照設定的順序一個一個來執行判斷的。

和當前判斷模式(例如:使用者名稱、角色、客戶端IP、地址)相匹配的第一條規則決定授權的結果。

如果這個規則是allow,則動作可執行;

如果是deny,不能執行;如果沒有規則匹配,動作可以執行。
 
為了確保某類動作在沒允許情況下不被執行,設定一個匹配所有人的deny規則在最後,類似如下:


return array(
    // ... 別的規則...
    // 以下匹配所有人規則拒絕'delete'動作
    array('deny',
        'action'=>'delete',
    ),
);
因為如果沒有設定規則匹配動作,動作預設會被執行。
訪問規則通過如下的上下文引數設定:


actions: 設定哪個動作匹配此規則。


users: 設定哪個使用者匹配此規則。

此當前使用者的name 被用來匹配,三種設定字元在這裡可以用:
*: 任何使用者,包括匿名和驗證通過的使用者。
?: 匿名使用者。
@: 驗證通過的使用者。

roles: 設定哪個角色匹配此規則

這裡用到了將在後面描述的role-based access control技術。

In particular, the rule is applied if CWebUser::checkAccess returns true for one of the roles.提示,使用者角色應該被設定成allow規則,因為角色代表能做某些事情。


ips: 設定哪個客戶端IP匹配此規則。

verbs: 設定哪種請求型別(例如:GET, POST)匹配此規則。


expression: 設定一個PHP表示式。

它的值用來表明這條規則是否適用。在表示式,你可以使用一個叫$user的變數,它代表的是Yii::app()->user。

訪問規則中:
expression: 設定一個PHP表示式。它的值用來表明這條規則是否適用。在表示式,你可以使用一個叫$user的變數,它代表的是Yii::app()->user。
expression的具體用法:
class AdminController extends CController
{
  ……
    public function accessRules()
    {
        return array(
        array('allow',  //允許所有人執行'login','error','index'
                'actions'=>array('login','error','index'),
                'users'=>array('*'),
        ),
        array('allow', //允許超級管理員執行所有動作
                'actions'=>array('create','update','delete'),
                'expression'=>array($this,'isSuperAdmin'),
        ),
        array('allow',//允許普通管理員執行
                'actions'=>array('update'),
                'expression'=>array($this,'isNormalAdmin'),    //表示呼叫$this(即AdminController)中的isNormalAdmin方法。
        ),      
        array('deny',  // deny all users
                'users'=>array('*'),
        ),
        );
    }

    //判斷是否是超級管理員
    protected function isSuperAdmin($user)   //其中$user代表Yii::app()->user即登入使用者。
    {
        return ($this->loadModel($user->id)->adminAdminFlag==1);
    }

    //判斷是否是普通管理員
    protected function isNormalAdmin($user)    //其中$user代表Yii::app()->user即登入使用者。
    {
        return ($this->loadModel($user->id)->adminAdminFlag==0);
    }

    public function loadModel($id)
    {
        $model=Admin::model()->findByPk((int)$id);
        if($model===null){
            throw new CHttpException(404,'頁面不存在');     
        }
        return $model;
    }
}

注:其中$user代表Yii::app()->user即登入使用者。

相關推薦

訪問控制過濾器Access Control Filter

訪問控制過濾器是檢查當前使用者是否能執行訪問的controller action的初步授權模式。 這種授權模式基於使用者名稱,客戶IP地址和訪問型別。 訪問控制過濾器,適用於簡單的驗證。 需要複雜的訪問控制,需要使用將要講解到的基於角色訪問控制(role-bas

Azure ARM (16) 基於角色的訪問控制 (Role Based Access Control, RBAC) - 使用默認的Role

not 問控制 https 所有 嘗試 介紹 admin ima 服務管理   《Windows Azure Platform 系列文章目錄》   今天上午剛剛和客戶溝通過,趁熱打鐵寫一篇Blog。   熟悉Microsoft Azure平臺的讀者都知道,在

Azure ARM (17) 基於角色的訪問控制 (Role Based Access Control, RBAC) - 自定義Role

結果 del role environ db4 lis sele logs ini   《Windows Azure Platform 系列文章目錄》      在上面一篇博客中,筆者介紹了如何在RBAC裏面,設置默認的Role。   這裏筆者將介紹如何使用自定的Ro

傳輸控制協議transmission control protocol——TCP 整理

概述 TCP 使用 GBN 和 SR 協議的組合來提供可靠性。為了實現這個目的,TCP 使用校驗和(為差錯發現)、丟失或被破壞分組重傳、 累積和選擇確認以及計時器。     TCP服務 1、TCP使用埠號來實現程序間通訊 2、TCP 是一個面向流的協議。T

Linux程序控制Processing Control Block

程序 在廣義上,所有的程序資訊被放在一個叫做程序控制塊的資料結構中,可以理解為程序屬性 的集合。 程序控制塊 每個程序在核心中都有一個程序控制塊(PCB)來維護程序相關的資訊,Linux核心的 程序控制塊是task_struct結構體。現在我們全面瞭解

《計算機網路》第四章:介質訪問控制The Medium Access Control Sublayer

Copyright(C)肖文棟教授@北京科技大學自動化學院內容安排4.1 通道分配問題The Channel Allocation Problem 4.2 多路訪問協議Multiple Access Protocols 4.3 乙太網Ethernet 4.4 無線區域網Wir

訪問修飾符 public 和 private Access Control

可見性: visibility   private : 不可被外部訪問,即不可見(invisible)   public : 可被外部訪問的,即可見(visible)   java習慣將屬性設定為 private,當要訪問某個屬性時,新增一個getter方法,當要設定屬性值時,新增一個set

Cisco之訪問控制列表ACL

cisco acl 訪問控制列表(ACL)是應用在路由器接口的指令列表(即規則),這些規則表用來告訴路由器,哪些數據包可以接收,哪些包需要拒絕。其基本原理如下:ACL使用包過濾技術,在路由器上讀取OSI七層模型的第三層和第四層包頭中的信息,如源地址、目的地址、源端口、目的端口等,根據預先定義的規則,對包

訪問控制列表配置命令及原理

ip協議 tp服務器 tcp/ip協議 deny 管理 通信 rpc 文本 控制 訪問控制列表(一)TCP/IP協議族的傳輸層協議主要有兩個:(1)TCP傳輸控制協議(2)UDP用戶數據報協議 TCP是面向連接的、可靠的進程到進程通信的協議TCP提供全雙工服務,即數據可在同

訪問控制列表配置命令

operator rmi sco deny tin sta nac ati name 訪問控制列表(二)配置命令擴展訪問控制列表的配置創建ACLRouter(config)# access-list access-list-number { permit | deny }

lamp-配置防盜鏈、訪問控制Directory針對目錄訪問控制針對單文件

lamp 訪問控制 防盜鏈 directory 配置防盜鏈 防止服務器的圖片和其他資源被非本機的站點引用,被其他網站引用後會導致流量圖片的用戶的數量暴增,而帶寬流量增加、增加站點的成本; 編輯虛擬配置文件 vim /usr/local/apache2.4/conf/extra/httpd-vh

第十三章 IP訪問控制列表ACL

ACL第十三章 IP訪問控制列表(ACL)為什麽要使用訪問列表管理網絡中逐步增長的 IP 數據當數據通過路由器時進行過濾訪問列表的應用允許、拒絕數據包通過路由器允許、拒絕Telnet會話的建立沒有設置訪問列表時,所有的數據包都會在網絡上傳輸什麽是訪問列表--(標準,擴展)標準檢查源地址通常允許、拒絕的是完整的

nuxt.js 本地開發跨域問題Access-Control-Allow-Origin及其解決方案

先執行npm i @gauseen/nuxt-proxy -D   再nuxt.config.js的module.exports 裡面新增如下程式碼   modules:[ '@nuxtjs/axios', // 請求代理配置,解決跨域 '

MFC中滑塊控制元件Slide Control的使用

滑動控制元件是Windows中最常用的控制元件之一。一般而言它是由一個滑動條,一個滑塊和可選的刻度組成,使用者可以通過移動滑塊在相應的控制元件中顯示對應的值。通常,在滑動控制元件附近一定有標籤控制元件或編輯框控制元件,用於顯示相應的值。滑動控制元件在應用程式中用途級為廣泛,如在桌面的屬性中就可以看到

3、DCLData Control Language資料庫控制語言 授權,角色控制

建立使用者: 命令:   1  CREATE USER 'username'@'host'IDENTI

4、TCLTransaction Control Language事務控制語言

cbe 文件 關於 成功 手動 讀取 tab 新增 完成 一、事務定義 Transaction 事務:一個最小的不可再分的工作單元;通常一個事務對應一個完整的業務(例如銀行賬戶轉賬業務,該業務就是一個最小的工作單元) 一個完整的業務需要批量的DML(insert、upda

PHP三種訪問控制模式public、protected、private解析

參考:https://www.cnblogs.com/chbyl/p/7116591.html public:公有型別 在子類中可以通過self::var調用方法或屬性,可以使用parent::method呼叫父類方法 在例項中可以通過$obj->var來呼叫方法或屬性

tcpTransmission Control Protocol傳輸控制協議及案例檔案下載器

----------udp通訊模型 是寫信的模型 要填上ip 埠 特點:不太安全,容易丟包 飛q:edp ----------tcp通訊模型 是打電話的模型,不需要填寫ip和port TCP:安全 在通訊開始之前,一定要建立相關的連結,才能傳送資料。 建立通道。 --------

【原創】WebRTC的擁塞控制技術Congestion Control

本文為個人原創,歡迎轉載,但請務必在明顯位置註明出處! 1. 概述 對於共享網路資源的各類應用來說,擁塞控制技術的使用有利於提高頻寬利用率,同時也使得終端使用者在使用網路時能夠獲得更好的體驗。在協議層面上擁塞控制是TCP的一個總要的組成部分;但是對於非面向連結的傳輸層協議,如UDP,其在協議層面上並沒有

Kubernetes中的角色訪問控制機制RBAC支援_Kubernetes中文社群

原標題: RBAC Support in Kubernetes Kubernetes 中的 RBAC 支援 PS:在Kubernetes1.6版本中新增角色訪問控制機制(Role-Based Access,RBAC)讓叢集管理員可以針對特定使用者或服務賬號的角色,進行更精確的資源訪問控制。在R