Yii検証と認可


一、検証と授権
1、基本検証授権方式
コントローラでfiltersメソッドを何度も書きます.このfilterはフィルタを指定し、現在の制御方法であってもよく、filterで始まる必要があります.
yiiの例のブログの例を見てみましょう.

<?php
class TblPostController extends Controller
{

	/**
	 * @return array  , 
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // ? 
				'actions'=>array('index','view'),
				'users'=>array('*'),
			),
			array('allow', // @ 
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
			),
			array('deny',  // * 
				'users'=>array('*'),
			),
		);
	}

 
アクセスコントロールは実はCControllerの下の方法で、

<?php
   /**
	 * The filter method for 'accessControl' filter.
	 * This filter is a wrapper of {@link CAccessControlFilter}.
	 * To use this filter, you must override {@link accessRules} method.
	 * @param CFilterChain the filter chain that the filter is on.
	 */
	public function filterAccessControl($filterChain)
	{
		$filter=new CAccessControlFilter;
		$filter->setRules($this->accessRules());
		$filter->filter($filterChain);
	}

彼が呼び出したのは実はCAccessControlFilterであることがわかります.マニュアルを見て、accessRulesルールのすべての説明はです.

array(
  'allow',  // or 'deny'
  // 
  'actions'=>array('edit', 'delete'),
  //  

  // This option is available since version 1.0.3.
  'controllers'=>array('post', 'admin/user'),
  //  

  // Use * to represent all users, ? guest users, and @ authenticated users
  'users'=>array('thomas', 'kevin'),
  //  .
  'roles'=>array('admin', 'editor'),
  //  IP 
   'ips'=>array('127.0.0.1'),
  //  
  'verbs'=>array('GET', 'POST'),
  //   PHP 。 。 , $user , Yii::app()->user。 1.0.3 。
  'expression'=>'!$user->isGuest && $user->level==2',
)

 
 
 
2、RBAC認証認証方式
1)プロファイルmain.phpでの構成

'authManager' => array(
	   'class' => 'CDbAuthManager',
	   'defaultRoles'=>array('guest'),// 
            'itemTable' => 'authitem',// 
            'itemChildTable' => 'authitemchild',// 
            'assignmentTable' => 'authassignment',// 
	   'connectionID'=>'db'
),

'authitem' yii 

2)  $auth = Yii::app()->authManager;
        // 
        $auth->createOperation('index',' ');
        $auth->createOperation('view',' ');
        $auth->createOperation('create',' ');
        $auth->createOperation('update',' ');
        $auth->createOperation('delete',' ');
       // 
        $role = $auth->createRole('admin');
        $role->addChild('index');
        $role->addChild('view');
        $role->addChild('create');
        $role->addChild('update');
        $role->addChild('delete');
        // id=1 admin 
        $auth->assign('admin',1);

テーブルに対応するレコードが作成されます.ここではidが1のユーザーにadminの役割を割り当てます.
3)ユーザーがアクセスできるかどうかを確認する

 if (!Yii::app()->user->checkAccess($access) || Yii::app()->user->isGuest){
          $this->onUnauthorizedAccess();
  } else {
          return true;
  }

検証するコントローラがクラスを継承する場合、BaseControllerというクラスがCController書き換えイベントbeforeActionを継承することによって検証を実現します.srbacプラグインを使用して実装します.
二、cssとjsファイルの管理
1、資源の発表方式
1)

<?php
 $file = dirname(__FILE__).DIRECTORY_SEPARATOR.'user.css';
 $this->skin = yii::app()->getAssetManager()->publish($file);

リソースをパブリッシュするのは、ディレクトリを介してassertディレクトリの下にassetsd 39 ec 355のような一意のファイル名を生成することです.
ファイルまたはディレクトリは過去にコピーされ、ファイルであればファイルの最終変更時間を判断してコピーされ、ファイルが変更された場合は再発行されます.ファイルがディレクトリの場合、そのディレクトリの下のすべてのファイルがassertの下にコピーされ、ファイルの変更は戻って再コピーされません.ディレクトリの下にファイルが削除されている場合は、再パブリッシュします.
2)アプリケーションのビューにリンクを追加します.

 yii::app()->clientScript->registerCssFile($this->skin);

headに追加されます

<link rel="stylesheet" type="text/css" href="/blog/assets/d39ec355/user.css" />

2、固定ディレクトリを使う