Heim  >  Artikel  >  Backend-Entwicklung  >  So fügen Sie eine neue Benutzerüberprüfung in yii hinzu

So fügen Sie eine neue Benutzerüberprüfung in yii hinzu

不言
不言Original
2018-06-15 16:20:261342Durchsuche

Dieser Artikel ist eine detaillierte Analyse und Einführung in die Methode zum Hinzufügen einer neuen Benutzerüberprüfung in yii. Freunde, die sie benötigen, können darauf verweisen

1 Warum müssen Sie das tun? Einen neuen Benutzer hinzufügen? Verifizierung:
Weil ich das Website-Backend und das Frontend in derselben yii-Anwendung erstellen möchte. Und diese beiden Benutzerverifizierungen sind völlig unterschiedlich , daher sind zwei verschiedene Anmeldeseiten erforderlich und Benutzerinformationen müssen in verschiedenen Cookies oder Sitzungen gespeichert werden. Daher muss einer Anwendung eine Benutzerüberprüfung hinzugefügt werden
2 🎜>
Bevor wir die Benutzerüberprüfung anpassen, müssen wir zunächst die Überprüfungs- und Autorisierungsmethoden von yii herausfinden.
Um einen Benutzer zu überprüfen, müssen wir eine Überprüfungsklasse mit Überprüfungslogik definieren Zur Implementierung in der IUserIdentity-Schnittstelle können verschiedene Klassen unterschiedliche Überprüfungsmethoden implementieren. Für die Website-Anmeldung ist im Allgemeinen die CUserIdentity-Klasse erforderlich, die im Allgemeinen zur Überprüfung von Benutzernamen und Passwörtern verwendet wird Es ist die Methode „authenticate()“, um unsere eigene
-Überprüfungsmethode zu implementieren. Der spezifische Code lautet wie folgt:
PHP-Code

class UserIdentity extends CUserIdentity  
{  
    private $_id;  
    public function authenticate()  
    {  
        $record=User::model()->findByAttributes(array('username'=>$this->username));  
        if($record===null)  
            $this->errorCode=self::ERROR_USERNAME_INVALID;  
        else if($record->password!==md5($this->password))  
            $this->errorCode=self::ERROR_PASSWORD_INVALID;  
        else 
        {  
            $this->_id=$record->id;  
            $this->setState('title', $record->title);  
            $this->errorCode=self::ERROR_NONE;  
        }  
        return !$this->errorCode;  
    }  
    public function getId()  
    {  
        return $this->_id;  
    }  
}

Wenn sich der Benutzer anmeldet, lautet der folgende Code aufgerufen:

PHP-Code

// 使用提供的用户名和密码登录用户  
$identity=new UserIdentity($username,$password);  
if($identity->authenticate())  
    Yii::app()->user->login($identity);  
else 
    echo $identity->errorMessage;


Wenn der Benutzer das Programm verlässt, wird der folgende Code aufgerufen:
PHP-Code

// 注销当前用户  
Yii::app()->user->logout(); 
 其中的user是yii的一个components.需要在protected/config/main.php中定义

PHP-Code

'user'=>array(  
    // enable cookie-based authentication  
    'allowAutoLogin'=>true,  
        'loginUrl' => array('site/login'),  
),

Hier haben wir den Klassennamen des Benutzers nicht angegeben, da der Benutzer in Yii standardmäßig eine Instanz der CWebUser-Klasse ist.

Wir haben jetzt die Überprüfung der Benutzeranmeldung implementiert Unabhängig davon, ob der Benutzer angemeldet ist oder nicht, kann auf alle Aktionen zugegriffen werden. Der nächste Schritt besteht darin, den Benutzerzugriff über den Zugriffskontrollfilter zu autorisieren ein einfacher Controller mit Zugriffskontrolle:
PHP-Code

class AdminDefaultController extends CController  
{   
    public function filters()  
        {  
            return array('accessControl');  
        }  
        public function accessRules()  
        {  
            return array(  
                array(  
                    'allow',  
                    'users' => array('@'),  
                ),  
                array(  
                    'deny',  
                    'users' => array('*')  
                ),  
            );  
        }  
}

Wir legen bestimmte Filter in der Filtermethode fest. Wir können sehen, dass das von der Filtermethode zurückgegebene Array einen accessControl-Parameter enthält ist eine filterAccessControl-Methode in der CController-Klasse:

PHP-Code

public function filterAccessControl($filterChain)  
{  
    $filter=new CAccessControlFilter;  
    $filter->setRules($this->accessRules());  
    $filter->filter($filterChain);  
}
Erstellen Sie darin eine neue CAccessControlFilter-Instanz und übergeben Sie die Parameter, die von der accessRules()-Methode zurückgegeben werden, wenn setRules.

$ filter->filter($filterChain) Rufen Sie dann weiterhin andere Filter auf.


Und alle spezifischen Autorisierungsregeln sind in accessRules definiert:
Php-Code

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('*'),  
            ),  
        );  
    }

Spezifische Regeln finden Sie im yii-Handbuch.



3. Fügen Sie ein neues Verifizierungssystem hinzu:Zuerst erben wir einen CAdminUser von CWebUser:
Php-Code

class CAdminWebUser extends CWebUser  
{  
    public $loginUrl = array('admin/admin/login');  
}
Wir müssen Es in Komponenten platzieren

Wenn es sich um eine globale Anwendung handelt, übergeben Sie den Komponentenabschnitt von protected/config/main.php:
PHP-Code

'user'=>array(  
    // enable cookie-based authentication  
        'class' => 'CAdminUser',  
    'allowAutoLogin'=>true,  
       'loginUrl' => array('site/login'),  
),

Wenn es in Modulen ist Fügen Sie in diesem Fall den folgenden Code in die Init-Methode der Modulklasse ein:

PHP-Code

$this->setComponents(array(  
       'adminUser' => array(  
                'class' => 'CAdminWebUser',  
                'allowAutoLogin' => false,  
        )  
));

Der letzte Aufrufmethode

PHP-Code

//全局应用  
Yii::app()->getComponent('adminUser');  
//在模块中  
Yii::app()->controller->module->getComponent('adminUser');
Aber das reicht nicht aus, wir müssen auch den Filter des Controllers ändern. Wir müssen einen Filter anpassen, um die Überprüfung und Autorisierung eines anderen Benutzers zu implementieren

Der erste Schritt besteht darin, einen Filter anzupassen:
PHP-Code

class CAdminAccessControlFilter extends CAccessControlFilter  
{  
    protected function preFilter($filterChain)  
    {  
        $app=Yii::app();  
        $request=$app->getRequest();  
        $user = Yii::app()->controller->module->getComponent('adminUser');  
        $verb=$request->getRequestType();  
        $ip=$request->getUserHostAddress();  
        foreach($this->getRules() as $rule)  
        {  
            if(($allow=$rule->isUserAllowed($user,$filterChain->controller,$filterChain->action,$ip,$verb))>0) // allowed  
                break;  
            else if($allow<0) // denied  
            {  
                $this->accessDenied($user);  
                return false;  
            }  
        }  
        return true;  
    }  
}

und dann die filterAccessController-Methode der CController-Klasse

PHP-Code

public function filterAccessControl($filterChain)  
{  
    $filter = new CAdminAccessControlFilter();  
    $filter->setRules($this->accessRules());  
    $filter->filter($filterChain);  
}  
//在这里我们使用自定义的filter类替换了原来的filter

OK, hier können wir in den accessRules() dieses Controllers angeben, dass der Administrator berechtigt ist

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für alle hilfreich sein Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website!

Verwandte Empfehlungen:

Über die Implementierung der Anmeldefunktion im Yii-Framework von PHP


So ändern Sie yii2 .0 Benutzer Die für die Anmeldung verwendete Benutzertabelle besteht aus anderen Tabellen


Das obige ist der detaillierte Inhalt vonSo fügen Sie eine neue Benutzerüberprüfung in yii hinzu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn