2009-07-31 51 views
2

我爲使用CAS提供單點登錄認證的大學的一個部門工作,並且正在編寫需要使用此CAS服務的CakePHP應用程序。我需要編寫代碼:看到我應該將CAS會話檢查代碼放在CakePHP應用程序中?

  • 檢查與CAS服務器,如果用戶在
  • 記錄從服務器拉一些憑據如果是
  • 檢查與內部ACL的憑據,如可以訪問應用程序的人員集合是可以登錄到CAS服務的集合的子集。
  • 爲管理員用戶提供了一些機制,可以通過在CAS系統之外創建特殊的管理員用戶(帶來所有令人頭痛的事情),或者通過促進某些CAS用戶(帶來不同的頭痛)。

作爲CakePHP的一個相對新手,我經常在與「不屬於」的代碼粘在一起。我能想到的最好的結果是,這段代碼應該放在App Controller的beforeFilter方法中,但我想知道,這是最適合它的地方嗎?另外,它是否太低,以利用管理路由?最後,我知道CakePHP同時提供了Auth和ACL組件,但是當我研究使用它們時,它們似乎不適合與外部認證服務進行接口連接。我錯了嗎?這兩者中的哪一個都適合我需要做的事?

謝謝!

回答

1

如果您看看Cake的core components,您可以看到您的CAS需求符合組件通常用於的類型(即。auth/session)。

我會建議創建一個CasAuthComponent。有一些關於extending AuthComponent的信息,在我以前的答案中,如果您想在現有的核心AuthComponent之上構建,這可能會很有用。

A組分(基本上是可重複使用的控制器代碼)可以與模型交互,使用的其他組件(如會議)和控制用戶流量(重定向例如)

注意,芯AuthComponent實際上從模型中檢索信息(默認情況下爲用戶模型),所以你可以做類似的事情。

您創建的CasAuthComponent可能是$use負責數據CRUD操作(主要檢索用戶)的外部用戶模型(CasUser也許)。

您可以更進一步,將CAS交互抽象爲此模型使用的數據源,但如果您不打算在其他模型中重複使用代碼,則它並不是絕對必要的。

最終結果可以被打包成一個插件:

  • CasAuthComponentapp/plugins/cas/controllers/components/cas_auth.php
  • CasUserapp/plugins/cas/models/cas_user.php
  • CasSourceapp/plugins/cas/models/datasources/cas_source.php)[可選]

而在使用將以下內容放入app_controller中:

public $components = array('Cas.CasAuthComponent'); 

如果您希望能夠從管理蛋糕的用戶,您還可以在您的插件控制器和視圖,它允許用戶與CasUser模型(即互動。 $this->CasUser->save())。

+0

如果您不打算使用核心`AuthComponent`,則可以將`CasAuthComponent`命名爲`AuthComponent`。另外,如果您不打算在MySQL數據庫中維護本地用戶信息,則可以將`CasUser`命名爲`User`。但是,如果你這樣做了,你可能想稱之爲`ExternalUser`來將其語義與數據源(CAS)分離。 – deizel 2009-08-01 14:29:52

相關問題