usuarios tutorial español documentacion control basado acceso php yii

php - tutorial - yii2 plugins



Yii comprueba si el usuario está conectado antes de cada página (9)

Debo verificar si el usuario está conectado antes de representar cada ejemplo de página:

http://mypage.com/site/about

al comienzo, compruebe si el usuario está conectado, si no es así - redirigir la página de inicio de sesión Tom No quiero agregarlo en cada componente, ¿cómo hacerlo?


Escriba un código para verificar si el usuario está conectado o no en un archivo diferente.

Luego incluya esa página php en cada archivo.

Simplemente tendrá que escribir el siguiente código.

include(''checklogin.php'');

En la página checklogin.php, puede escribir lo siguiente para verificar si la cookie está configurada.

isset(cookie(''<name_of_cookie>'')) { //User in already logged in } else { //Redirect to login page }


Puede escribir un cheque en la función init() del controlador. Lo cual redirigirá al usuario si no está conectado

public function init() { if(!isset(Yii::app()->session[''user''])) { $this->redirect(array(''login/'')); } }


También puede verificar usando esto si es verdadero, entonces el usuario no ha iniciado sesión más conectado

if(Yii::app()->user->isGuest){ //not logged user }else{ //loggedin user }


Utilice la regla de acceso para asegurarse de que esta sea una mejor manera:

public function accessRules() { return array( array(''allow'', // allow all users to perform ''index'' and ''contact'' actions ''actions''=>array(''index'',''contact''), ''users''=>array(''*''), ), array(''allow'', // allow authenticated user to perform ''delete'' and ''update'' actions ''actions''=>array(''update'',''delete''), ''users''=>array(''@''), ), array(''deny'', // deny all users ''users''=>array(''*''), ), ); }

si realmente quieres una verificación de un lugar, ve al component/controller y hazlo en el controlador. porque todo el controlador hereda de ese controlador.


Para una solución global, agregue accessControl a su controlador base (por defecto protected/components/CController.php ).

public function filters(){ return array(''accessControl''); } public function accessRules() { return array( array(''allow'', ''users''=>array(''@''), ), array(''deny'', // deny all users ''users''=>array(''*''), ), ); }

Luego, en el controlador con su acción de inicio de sesión, edite las accessRules de accessRules para permitir que todos los usuarios accedan a la página de inicio de sesión.

public function accessRules() { return array_merge(array( ''allow'', ''actions''=>array(''login''), ''users''=>array(''*''), ),parent::accessRules() ); }


Extender componentes / Controlador con beforeAction

public function beforeAction(CAction $action) { if(!isset(Yii::app()->session[''user'']) && !($action->controller->id == ''site'' && $action->id == ''login'')) { $this->redirect(array(''site/login'')); } return true; }


Esto funciona para mí

public function beforeAction(CAction $action) { if(!isset(Yii::app()->user->user_id) && !($action->controller->id == ''site'' && $action->id == ''login'')) { $this->redirect(array(''site/login'')); } return true; }

Solo necesita agregar la función anterior en component / Controller.php



Perdón por la publicación de zombies, pero uso isGuest.

if (Yii::app()->user->isGuest) { $this->redirect(''login/page''); }