【发布时间】:2010-01-15 11:43:28
【问题描述】:
我在我的 cakephp 项目中使用 auth 组件
我将类型字段添加到用户 Mysql 表中
那个枚举类型:admin、client
我需要身份验证组件将管理员重定向到 CP 页面,并将客户端重定向到他们的个人资料页面,并且只能访问一个控制器..
当然不使用 ACL 或任何其他相关
【问题讨论】:
标签: cakephp
我在我的 cakephp 项目中使用 auth 组件
我将类型字段添加到用户 Mysql 表中
那个枚举类型:admin、client
我需要身份验证组件将管理员重定向到 CP 页面,并将客户端重定向到他们的个人资料页面,并且只能访问一个控制器..
当然不使用 ACL 或任何其他相关
【问题讨论】:
标签: cakephp
我建议您利用可以添加到控制器或模型中的 isAuthorized() 函数。设置 AuthComponent::authorize = {'controller'|'model'} 以选择您要使用的。
然后你在模型|控制器中编写一个 isAuthorized() 函数,它为每个操作返回 t/f on auth/not auth。如果您愿意,您也可以进行一些行级检查。
现在,如果您只是想将管理员重定向到登录/等时的正确页面,您可以将代码添加到 beforeFilter() 方法(在特定控制器或 app_controller.php 中)。在这里,只需检查应用程序设置的管理员值是否与用户的管理员值相同(AuthComponent 会将其存储在 Session 数据中,可通过 $this->Auth->User() 访问)。然后适当地路由到管理/非管理区域。
【讨论】:
isAuthorized() 是最好的选择。 我建议将用户与其在数据库中的组分开,所以用户 habtm 组...但如果用户属于一个且仅一个组,这不是问题 我不建议将 ACL 用于非基于记录级别的权限系统
【讨论】:
只是需要注意的一点,但除非最近发生了变化,否则 CakePHP 不支持 ENUM 列类型。
最好的选择是组模型(groups mysql 表)和 users 表上的 group_id 字段。 然后你可以 $hasOne = array( 'Group' );在您的用户模型中。
从那里,您可以通过简单的谷歌搜索“CakePHP Auth User Group”来遵循大量关于 Auth 组件的组访问控制教程中的任何一个
【讨论】: