2013-06-19 4 views

Trả lời

3

Sử dụng quy tắc truy cập để achevie đây sẽ là một cách tốt hơn:

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

nếu bạn thực sự muốn một chỗ kiểm tra ,, sau đó đi đến component/controller và làm điều đó trong bộ điều khiển. bởi vì tất cả các bộ điều khiển kế thừa từ bộ điều khiển đó.

+1

tôi không muốn đặt nó trong mỗi bộ điều khiển duy nhất, tôi cần giải pháp toàn cầu – rafal235

+0

nơi tôi có thể tìm thấy 'thành phần/bộ điều khiển'? – Ruben

+0

@ user2075220 sau đó tạo một BaseController và có bộ điều khiển này mở rộng BaseController –

3

Bạn có thể viết séc bằng chức năng init() của bộ điều khiển. Mà sẽ chuyển hướng người dùng nếu ông không được đăng nhập

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

tôi không muốn đặt nó trong mỗi bộ điều khiển duy nhất, tôi cần giải pháp toàn cầu – rafal235

4

Bạn cũng có thể kiểm tra sử dụng này nếu nó là đúng thì người dùng không đăng nhập khác đăng nhập

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

Tôi không muốn đặt nó trong mỗi bộ điều khiển duy nhất, tôi cần giải pháp toàn cầu – rafal235

+0

Ya tôi đã nhận nó nhưng đối với mọi hành động là u sẽ kiểm tra xem ??? – Ninad

-1

Viết một mã số để kiểm tra xem người dùng đã đăng nhập hay không trong một tệp khác.

Sau đó, hãy bao gồm trang php đó trong mọi tệp.

Bạn sẽ chỉ phải viết mã sau đây.

include('checklogin.php'); 

Trong trang checklogin.php, bạn có thể viết như sau để kiểm tra xem cookie đã được đặt chưa.

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

tôi không muốn đặt nó trong mỗi bộ điều khiển duy nhất, tôi cần giải pháp toàn cầu – rafal235

+0

Nếu nó là php thì đó là giải pháp duy nhất. Bạn sẽ phải viết một dòng ở đầu mỗi trang mà bạn muốn kiểm tra.

2

Để có giải pháp toàn cầu, thêm quyền truy cậpKiểm soát bộ điều khiển cơ sở của bạn (theo mặc định 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('*'), 
     ), 
    ); 
} 

Sau đó, trong bộ điều khiển với đăng nhập hành động chỉnh sửa của bạn accessRules để cho phép tất cả người dùng để truy cập vào trang đăng nhập

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

Mở rộng các thành phần/Controller với 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

này làm việc cho tôi

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

Bạn cần phải chỉ cần thêm các chức năng trên trong thành phần/Controller.php

+0

bạn có thể nói đâu là componene/Controller.php trong Yii2 –

0

Xin lỗi vì đăng tải zombie, nhưng tôi sử dụng isGuest .

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