Yii ではデフォルトで user が CWebUser クラスのインスタンスであるため、ここではユーザーのログイン検証を実装しました。しかし、ログインしているかどうかに関係なく、ユーザーはすべてのアクションにアクセスできるようになりました。そのため、Yii では、ユーザーの承認はアクセス制御フィルターを通じて実装されます。単純なアクセス制御フィルターを見てみましょう:
DClass AdminDefaultController Extends CController {
Public Function Filters () {
Return Array accessRules () {
Return array ' => array('@'),
array('*')
filters メソッドで特定のフィルターを設定します。 filters メソッドによって返された配列に accessControl パラメータがあることがわかります。 CController クラスに filterAccessControl メソッドがあります:
Php コード
コードをコピーします
コードは次のとおりです:
public関数 filterAccessControl($filterChain)
{
$filter=new CAccessControlFilter;
$filter->setRules($this->accessRules())
}
;新しい CAccessControlFilter インスタンスが内部で作成され、setRules
$filter->filter($filterChain) が他のフィルターを呼び出し続けるときに、accessRules() メソッドによって返されるパラメーターが渡されます。
ルールは次のとおりです。 accessRules で定義:
Php コード
コードをコピー コードは次のとおりです:
public function accessRules()
'actions'=> ;array('create', 'edit'),
t;array('delete'), 'ROLES' = & GT; Array ('Admin'),
),
Array ('DENY',
'Actions' = & GT; Array ('Delete'),
'ユーザー = & GT; Array ('*' ),
);
コードをコピーする class CAdminWebUser extends CWebUser
{
public $loginUrl = array('管理者/管理者/ログイン } ;
コンポーネントに配置する必要があります
グローバルアプリケーションの場合は、protected/config/main.php:
Phpコードのコンポーネントセクションを渡します
コードをコピーしますコードは次のとおりです:
'user'= >array(
// Cookie ベースの認証を有効にする
'class' => 'CAdminUser',
'allowAutoLogin'=>true,
'loginUrl' => array('site/ login'),
) ,
モジュール内にある場合は、モジュール クラスの init メソッドに次のコードを追加します:
Php コード
コードをコピー コードは次のとおりです:
$this->setComponents(array(
'adminuser' = & gt; array (
'class' = & gt; 'cadminwebuser',
'allowautologin' = & gt; false,
)); コード
コードは次のとおりです:
//グローバルアプリケーション
Yii::app()->getComponent('adminUser'); //モジュール内
Yii::app()->controller-> ->getComponent('adminUser');
しかし、これだけでは不十分です。別のユーザーの検証と承認を実装するには、フィルターをカスタマイズする必要もあります。フィルターを定義します:
Php コード
コードをコピーします
コードは次のとおりです:
class CAdminAccessControlFilter extends CAccessControlFilter
{ protected function preFilter($filterChain)
$app=Yii::app() ;
$request=$app->getRequest(); $user = Yii::app()->controller->module->getComponent('adminUser'); $verb=$request-> getRequestType (); $user、$filterChain->controller、$filterChain->action、 $ip,$verb))>0) // 許可されます $this- >accessDenied($user); return false; CController クラスの filterAccessController メソッドをオーバーライドします
Php コード
コードをコピーします
コードは次のとおりです:
public function filterAccessControl($filterChain)
{
$filter = new CAdminAccessControlFilter() ;
$filter->setRules($this->accessRules());
$filter->filter($filterChain );
//ここでは、元のフィルターを置き換えます。
OK、ここで、このコントローラーの accessRules() で adminUser の承認を指定できます
http://www.bkjia.com/PHPjc/327749.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327749.html技術記事 1. 新しいユーザー認証を追加する必要がある理由: 同じ yii アプリケーション内に Web サイトのバックエンドとフロントエンドを構築したいためですが、フロントエンドにもメンバー管理センターが含まれており、これら 2 つのユーザー認証は完了しています。