我有一个包含 admin 和 user 部分的项目。两个部分都使用相同的控制器,只是功能和模板不同(例如:viewAdmin()
和viewUser()
)。在每个控制器的功能beforeRender()
中,我将变量$admin
设置为true
用于管理功能,将false
设置为用户功能。
对于身份验证,我使用 Shibboleth 。 Shibboleth使用来自LDAP的数据,而用户类型保存在SQL数据库中,这意味着虽然它可以检查登录名和密码是否为false,但不能检查用户是否为admin。用户只要使用正确的action
(例如:转到链接http://example.com/tool/viewAdmin),就可以进入ADMIN部分。
为防止这种情况,我将必须:
Users
uid
(登录名)与我的SQL数据库中Users
表中的“登录”列进行比较Users
表中的“类型”列以了解用户是否为管理员。$admin
的值进行比较,并在必要时重定向到错误页面。问题是:我不想为每个控制器重复这些步骤。
目前我有两个想法:
UsersController
中编写一个函数,并在每个控制器中使用它。这两种方法都要求我更改所有控制器中的代码。我想通过减少app.php
或bootstrap.php
来减少工作量,找到更好的方法。
任何建议都值得赞赏。
答案 0 :(得分:0)
要在CakePHP控制器中共享方法,您可以执行以下操作:
但是,当您授权用户时,所有用户数据都存储在会话中,包括。是用户角色(例如admin,regular,member等)。
答案 1 :(得分:0)
使用官方的CakePHP身份验证插件,并使用所需的其他代码来扩展LDAP适配器。这很容易做到,也是解决问题的一种非常干净的方法。免责声明:我是身份验证插件的作者之一。 https://github.com/cakephp/authentication
或者,如果您想不了解任何框架,请使用我的基于身份验证插件的库,该库已与任何框架分离,但仍然可以与Cake https://github.com/Phauthentic/authentication很好地兼容。