0

YII アプリケーションのすべてのページで認証を強制する必要があります。これを行うために、 http : SiteController//www.heirbaut.nl/2010/02/23/forcing-a-yii-application-to-authenticate/ から取得した次のコードでクラスを拡張しました。

/**
 * @return array action filters
 */
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',  // allow all users to perform 'login'
            'actions'=>array('login'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform any action
            'users'=>array('@'),
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),
    );
}

これは、認証されていないユーザーへのすべてのリクエストを、index.phpURL のログインフォームにリダイレクトするという、想定されていることだけを行います。しかしindex.php?r=person、結果として、アプリケーションのメイン メニューはこの制限を回避し、認証に関係なく表示されます。

4

1 に答える 1

0

すべてのコントローラーはそのコードを参照する必要があります。オプションは、拡張CControllerしてprotected/componentsフォルダーに配置する独自のコントローラーを作成することです

class MyController extends CController{
    /**
     * @return array action filters
     */
    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', // allow authenticated user to perform any action
                'users'=>array('@'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }
}

次に、コントローラークラスで、拡張MyControllerおよびオーバーライドaccessRules()して、追加のルールを追加する必要があります

public class SiteController extends MyController{

    ...

    public function accessRules(){
        $rules=parent::accessRules();
        array_unshift($rules,array(
            'allow',  // allow all users to perform 'login'
            'actions'=>array('login'),
            'users'=>array('*'),
        ));
        return $rules;
    }

    ...
}
于 2013-02-09T09:27:57.687 に答える