2013-06-19 10 views

Odpowiedz

3

Zastosowanie dostęp do achevie przepis ten byłby lepszy sposób:

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

jeśli naprawdę chcesz jeden miejsce sprawdzanie ,, a następnie przejść do component/controller i zrobić to w kontrolerze. ponieważ wszystkie kontrolery dziedziczą z tego kontrolera.

+1

Nie chcę umieszczać go w każdym pojedynczym kontrolerze, potrzebuję globalnego rozwiązania – rafal235

+0

gdzie mogę znaleźć 'component/controller'? – Ruben

+0

@ user2075220 następnie stwórz BaseController i niech ten kontroler rozszerzy BaseController –

3

Możesz napisać czek w funkcji init() sterownika. Który przekieruje użytkownika, jeśli nie jest on zalogowany

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

nie chcę, aby umieścić go w każdym pojedynczym kontrolerze, muszę globalnego rozwiązania – rafal235

4

Można również sprawdzić za pomocą tego, czy to prawda, wówczas użytkownik nie jest zalogowany w innym zalogowany

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

Nie chcę, aby umieścić go w każdym pojedynczym kontrolerze, muszę Global Solution – rafal235

+0

Ya mam go, ale dla każdego działania są u zamiar Sprawdź to ??? – Ninad

-1

napisać kod, aby sprawdzić, czy użytkownik jest zalogowany lub nie w innym pliku.

Następnie dołącz tę stronę php do każdego pliku.

Wystarczy napisać następujący kod.

include('checklogin.php'); 

Na stronie checklogin.php można napisać, aby sprawdzić, czy plik cookie jest ustawiony.

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

Nie chcę umieszczać go w każdym pojedynczym kontrolerze, potrzebuję globalnego rozwiązania – rafal235

+0

Jeśli jest to php, to jest to jedyne rozwiązanie. Będziesz musiał napisać ten wiersz na początku każdej strony, na której chcesz sprawdzić.

2

Dla rozwiązania globalnego dodaj accessControl do kontrolera podstawowego (domyślnie 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('*'), 
     ), 
    ); 
} 

Następnie w sterowniku z edycję akcji logowania accessRules aby umożliwić wszystkim użytkownikom dostęp do strony logowania

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

przedłużyć komponenty/kontroler z 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; 
} 
3

Działa to dla ja

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; 
} 

Trzeba tylko dodać powyższą funkcję w składniku/Controller.php

+0

możesz powiedzieć, gdzie jest componene/Controller.php w Yii2 –

0

Niestety dla zombie delegowania, ale używam isGuest .

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