2

我在使用CAS提供单点登录身份验证的大学部门工作,并且正在编写需要使用此 CAS 服务的 CakePHP 应用程序。我需要编写以下代码:

  • 检查 CAS 服务器以查看用户是否已登录
  • 如果是,则从服务器中提取一些凭据
  • 根据内部 ACL 检查凭据,因为可以访问应用程序的一组人员是可以登录到 CAS 服务的一组人员的子集。
  • 为管理员用户提供一些机制,或者通过在 CAS 系统之外创建特殊的管理员用户(会带来所有的麻烦)或通过提升某些 CAS 用户(会带来不同的麻烦)。

作为 CakePHP 的新手,我经常纠结在哪里粘贴“不属于”的代码。我能想到的最好的办法是这段代码应该放在 App Controller 的 beforeFilter 方法中,但我想知道,这是最好的地方吗?此外,堆栈是否太低而无法利用管理路由?

最后,我知道 CakePHP 提供了 Auth 和 ACL 组件,但是当我研究使用它们时,它们似乎不适合与外部身份验证服务交互。我错了,其中任何一个都适合我需要做的事情吗?

谢谢!

4

1 回答 1

1

如果您查看 Cake 的核心组件,您会发现您的 CAS 要求符合组件通常用于的事物类型(即身份验证/会话)。

我建议创建一个CasAuthComponent. 在我以前的回答中,有一些关于扩展AuthComponent的信息,如果您希望在现有核心之上构建,这可能会很有用AuthComponent

组件(本质上是可重用的控制器代码)可以与模型交互,使用其他组件(例如 Session)并控制用户流(例如重定向)

请注意,核心AuthComponent实际上是从模型(默认为用户模型)中检索信息,因此您可以执行类似的操作。

CasAuthComponent您创建的可能是$use一个外部用户模型(CasUser可能),它负责对数据进行 CRUD 操作(主要是检索用户)。

您可以更进一步,将 CAS 交互抽象到此模型使用的数据源中,但如果您不打算在其他模型中重用代码,这并不是绝对必要的。

最终结果可以打包成一个插件:

  • CasAuthComponent( app/plugins/cas/controllers/components/cas_auth.php)
  • CasUser( app/plugins/cas/models/cas_user.php)
  • CasSource( app/plugins/cas/models/datasources/cas_source.php) [可选]

并通过将以下内容放入您的 app_controller 中,在您的应用程序中使用:

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

如果您希望能够从 Cake 管理用户,您还可以在插件中包含控制器和视图,从而允许用户与CasUser模型交互(即。$this->CasUser->save())。

于 2009-07-31T13:14:56.447 回答