Yii検証と認可
一、検証と授権
1、基本検証授権方式
コントローラでfiltersメソッドを何度も書きます.このfilterはフィルタを指定し、現在の制御方法であってもよく、filterで始まる必要があります.
yiiの例のブログの例を見てみましょう.
アクセスコントロールは実はCControllerの下の方法で、
彼が呼び出したのは実はCAccessControlFilterであることがわかります.マニュアルを見て、accessRulesルールのすべての説明はです.
2、RBAC認証認証方式
1)プロファイルmain.phpでの構成
テーブルに対応するレコードが作成されます.ここではidが1のユーザーにadminの役割を割り当てます.
3)ユーザーがアクセスできるかどうかを確認する
検証するコントローラがクラスを継承する場合、BaseControllerというクラスがCController書き換えイベントbeforeActionを継承することによって検証を実現します.srbacプラグインを使用して実装します.
二、cssとjsファイルの管理
1、資源の発表方式
1)
リソースをパブリッシュするのは、ディレクトリを介してassertディレクトリの下にassetsd 39 ec 355のような一意のファイル名を生成することです.
ファイルまたはディレクトリは過去にコピーされ、ファイルであればファイルの最終変更時間を判断してコピーされ、ファイルが変更された場合は再発行されます.ファイルがディレクトリの場合、そのディレクトリの下のすべてのファイルがassertの下にコピーされ、ファイルの変更は戻って再コピーされません.ディレクトリの下にファイルが削除されている場合は、再パブリッシュします.
2)アプリケーションのビューにリンクを追加します.
headに追加されます
2、固定ディレクトリを使う
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、固定ディレクトリを使う