2013-04-25 51 views
0

在我的控制器中,我通過在我的函數前加上admin_來限制訪問,然後讓AppController函數檢查用戶是否是管理員。有沒有辦法做到這一點與頁面(從PageController)?我們創建了一個管理主頁(如儀表板),用戶無法查看它們是否未登錄,但非管理員用戶可以查看它。我無法弄清楚如何防止這種情況。CakePHP:你可以在頁面中使用管理員前綴嗎?

+0

本教程http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html#authorization-who-s-allowed-to-access-what顯示你如何完成這樣做的基礎知識。整個教程很有用,但鏈接的部分與您想要執行的操作相關。 – kais 2013-04-26 14:27:58

+0

謝謝,但我一直在閱讀這一章,並沒有談論PagesController。我的其他控制器工作正常,但它並沒有幫助我在*頁上授權用戶* – emersonthis 2013-04-26 14:29:39

+0

如果您使用PagesController的顯示操作,它將允許任何用戶查看它。嘗試創建一個以admin_爲前綴的單獨操作並使用它來驅動儀表板。 http://book.cakephp.org/2.0/en/controllers/pages-controller.html – kais 2013-04-26 14:48:51

回答

1

你對網頁有什麼意思?靜態服務由PagesController.htm(l)文件位於您的webroot?

如果您的情況是第一件事,您可以爲頁面控制器實現此邏輯。 如果是第二個 - 請求沒有通過CakePHP(或任何其他服務器端腳本),那麼您不能通過Cake控制對它的訪問。

如果您的情況是別的,那麼請優化您的問題,我很樂意提供幫助。

正如評論所示,你處於這種情況下:1。在PagesController的類的聲明,它說:

class PagesController extends AppController { 

這意味着你可以使用在AppController中的任何一個類,它擴展AppController的任何邏輯。因此,您可以在PagesController中使用isAuthorized()

您只需創建一個名稱與「管理控制檯視圖」相同的方法,並僅允許管理員訪問該方法。或者只是檢查用戶角色。

+0

這是第一個。我想要求管理員角色查看由PagesController提供的特定頁面 – emersonthis 2013-04-26 14:26:55

1

假設第一個參數是請求的頁面,你可以使用此語句捕捉它:

$this->request->pass[0]; 

可以使用isAuthorized函數來解決你的問題做這樣的事情......

public function isAuthorized() 
{ 
    $page = strtolower($this->request->pass[0]); 

    if ($page = 'admin_page') 
    { 
     if ($this->Auth->user('Role.role_field') == 'Admin') 
     { 
      return TRUE; 
     } 
     else 
     { 
      return FALSE; 
     } 
    } 
    else 
    { 
     // This will authorize users for the other pages 
     return TRUE; 
    } 
} 

希望這會有所幫助。總是檢查CookBook:有時你需要檢查舊書籍以找到你真正需要的東西。快樂編碼!

相關問題