2012-07-08 98 views
2

我需要指出正確的方向。我正在編寫一個簡單的應用程序,用戶可以登錄並查看他們的任務列表。我希望應用程序安全。我只能認證用戶訪問整個網站。顯然這不是我想要的。我希望他們只能訪問他們自己的賬戶。有沒有一個很好的網站閱讀這個?我正在學習v2.x。謝謝如何將用戶登錄路由到他們的帳戶?

+0

你有任何代碼和具體的問題? – 2012-07-08 22:06:56

回答

1

我想不出除書以外的任何網站。這就是我實施的方式。我在應用程序控制器的beforeRender回調中設置了登錄用戶。這樣它就可以在所有控制器中使用。

我再有所謂的儀表盤

function dashboard($userId = NULL) {} 

用戶控制器的功能。如果用戶id相匹配的在登錄的用戶,或在我的情況下,用戶是管理員,再進行,否則重定向用戶提示他們不被允許。

所有這些都是在您僅使用Auth組件的情況下。如果您也想使用ACL組件,則必須檢查用戶是否也被允許訪問該頁面。

來源 http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html

0

你的問題是相當普遍的,但這裏有一些信息可能有幫助。

隨着登記和查看數據的登記,您可以訪問登錄的用戶ID。因此,在整個應用程序中,在所有方法中,只需獲取與登錄用戶ID相關的數據即可。

關於編輯/刪除數據,您可能需要根據他們嘗試編輯或刪除的記錄ID來檢查登錄用戶的ID。

這是我挖出的一些舊的CakePHP 1.3(即非2.x)代碼。此方法位於我的AppController中,並在用戶嘗試編輯/刪除記錄時調用,以確保該記錄屬於其用戶帳戶。

function checkUserID($pUserId) { 
    // This is called for methods when a user can only access it for their own user account - eg, a user can call 'edit', but only on their own records.  
    if ($pUserId != $this->Auth->user('id')){ 
     $this->Session->setFlash(__('You are not authorized to access that location', true)); 
     $this->redirect($this->referer()); 
    } 
} 

爲了舉例說明如何運用這種方法的例子,當用戶試圖在應用刪除評論,我做了以下內容:

$commentToDelete = $this->Comment->read(null, $id); // get the comment they are trying to delete 
$this->checkUserID($commentToDelete['Comment']['user_id']); // check that it is their own comment 
// If they pass the above test, then continue and delete the comment. 
// If not, they will have already been redirected by the checkUserID method 

讓我知道如果您有任何疑問。

編輯: 針對以下尼克的評論:之前

我用isAuthorized(),但不能看到它是如何在我上面給的例子工作。如果用戶的刪除一條評論,你必須這樣做:

$this->checkUserID($commentToDelete['Comment']['user_id']); // check that it is their own comment 

但如果他們刪除一個小部件,它必須是:

$this->checkUserID($widgetToDelete['Widget']['user_id']); // check that it is their own widget 

的情況可能是,如果更復雜,例如,他們正在編輯屬於「圖庫」記錄的「照片」記錄,該記錄持有其user_id,因此「照片」記錄本身沒有「user_id」字段。

我看不出你能夠在isAuthorized()中優雅地處理這些可能的情況。我錯過了什麼嗎?我想問題是,在isAuthorized()中,你可以得到已登錄用戶的ID,但是你怎麼知道要將其與哪個ID進行比較,以確保他們正在編輯或刪除的記錄屬於他們?

+0

這應該工作,但蛋糕有一個內置的身份驗證系統,將處理這個,而不必重新發明輪子和編寫自己的功能。 – 2012-07-09 03:07:09

+0

確定很酷。你能解釋一下嗎?有鏈接到適當的食譜頁面或什麼?或者可以將它作爲單獨的答案添加到此問題中?我討厭重新發明輪子!謝謝。 – 2012-07-09 03:54:02

+0

有一個isAuthorized();回調方法在這裏定義:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#using-controllerauthorize – 2012-07-09 06:08:12

0

我並不是100%確定你要問什麼,而是根據我的理解你需要你的用戶有權訪問與他們的帳戶有關的某種控制面板或界面。這裏是我會做什麼來實現這一點:

  • 建立在你的控制器功能不帶參數
  • 檢查,以確保用戶在
  • 記錄如果他們再設置您需要的數據同時使用 用戶的ID字段作爲條件。使用這種方法,用戶不能 指定他們試圖ACCES什麼數據,它是由在 控制器和模型邏輯
  • 如果他們不那麼他們重定向別處

如果您編輯你的問題,並提供一些你想要完成的更多信息我可以給你一個例子或進一步解釋。

+0

[link](http://bit.ly/Mk0Iyb )所以我創建了一個登錄。當用戶進入此時,可以訪問所有的信息。我希望他們只能訪問他們自己的文件夾,而不能訪問他人創建的文件夾。我正在考慮將文件夾外鍵添加到用戶表中。但我仍然不太瞭解如何連接用戶ID的文件夾。 – user1461577 2012-07-12 03:17:23

+0

用戶名和密碼是:test – user1461577 2012-07-12 03:21:21

相關問題