2010-05-08 27 views
9

Tôi có bộ điều khiển "Bài đăng" và "Người dùng". Tôi sử dụng thành phần Auth và tôi muốn tất cả người dùng có thể truy cập "Post.index" nhưng chỉ người dùng đã đăng nhập mới có thể truy cập "User.index".CakePHP Auth cách cho phép điều khiển và hành động cụ thể

Trong app_controller.php của tôi, tôi có điều này

$this->Auth->allow('signup', 'confirm', 'index'); 

nhưng với tất cả người dùng có thể truy cập post.index và user.index. Làm thế nào tôi có thể chỉ định một Controller trong allow-method?

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

$this->Auth->allow('signup', 'confirm', 'Post.index'); 

cập nhật tôi loại bỏ 'index' từ app_controller.php và thay vào đó thiết lập nó trong phương pháp beforeFilter trong bài điều khiển:

function beforeFilter() 
{ 
    parent::beforeFilter(); 
    $this->Auth->allow('index'); 
} 

Tôi cũng đặt biến "loggedIn" trong app_controller, mà không cần gọi "parent :: beforeFilter();" Tôi nhận được thông báo "biến không xác định".

thx sibidiba

Trả lời

13

Khoảng thời gian sẽ không hoạt động. Thay vào đó, bạn có thể thử '/'. Nếu điều đó không thành công, bạn nên thiết lập $this->Auth->allow('index') trong PostController's và UserController's ::beforeFilter() riêng lẻ. Đừng quên gọi cho cha mẹ :: beforeFilter().

+3

Câu trả lời hoàn hảo! Nó không hoạt động với '/' vì vậy tôi đã xóa 'chỉ mục' khỏi app_controller và cho phép nó trong trình điều khiển bài đăng: chức năng beforeFilter() { \t parent :: beforeFilter(); \t $ this-> Auth-> allow ('index'); } –

1

Tôi đang sử dụng CakePHP 2.x. Dấu gạch chéo không hoạt động.

Nếu bạn muốn cho phép người dùng truy cập "myController.myAction" mà không cần đăng nhập, bạn nên thêm beforeFilter() vào myController.php thay vì AppController.php

Đây là đoạn mã để thêm vào myController.php:

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('myAction'); 
} 
1

Phụ thuộc vào phiên bản bạn đang làm việc. Nếu nó là cakephp 2.x, hãy đặt mã này vào bộ điều khiển có hành động bạn muốn cấp quyền truy cập mà không cần đăng nhập. Như câu hỏi của bạn, bạn nên đặt mã này để điều khiển Bài:

function beforeFilter(){ 
    $this->Auth->allow(array('index','another action'));} 

allow(array('acction you want to allow')) thay allow('acction you want to allow')

0

$ this-> tên trả về điều khiển hiện yêu cầu.

thử điều này trong AppController :: beforeFilter()

public function beforeFilter() 
{ 

    // ... Basic configs 

    switch ($this->name) { 
     case 'Posts': 
      $this->Auth->allow('add'); 
      break;    
     case 'Test': 
      $this->Auth->allow('test'); 
      break; 
    } 
} 

Xin lỗi, tiếng Anh của tôi không tốt

1

Đối với CakePHP 2.x, có một số phương pháp (tùy thuộc vào phiên bản CakePHP).

Từ các tài liệu (http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html):

// Allow all actions. CakePHP 2.0 
$this->Auth->allow('*'); 

// Allow all actions. CakePHP 2.1 
$this->Auth->allow(); 

// Allow only the view and index actions. 
$this->Auth->allow('view', 'index'); 

// Allow only the view and index actions. 
$this->Auth->allow(array('view', 'index')); 
0

Trong bánh 3.x bạn có thể sử dụng các dòng mã dưới đây để cho phép tất cả các hành động.

public function beforeFilter(Event $event) { 
     parent::beforeFilter($event); 
     $this->Auth->allow(); 
    } 
Các vấn đề liên quan