我正在尝试创建一个通用的登录系统,以便它可以适用于各种应用程序。我决定系统的两个主要“部分”是User Meta Data&角色/资源/ ACL。
1。元数据
我想保留大部分数据,例如数据库中的用户可以使用哪些元数据,以便管理员可以使用某些GUI管理它们。
问题是如何配置我想要输出的方式(文本框,复选框,无线电等)。然后另一个问题是验证,过滤器。
2。 ACL
我认为对于简单的ACL,它可以正常工作。但是假设我想说用户能够修改他们拥有的帖子。在使用断言完成的Zend_ACL
中。我认为这将使一个“简单”的登录系统过于复杂?我想也很难建立?
目前我有我的数据库
答案 0 :(得分:1)
登录用户:我建议使用具有Auth
和loginAction
的单独控制器(例如称为logoutAction
)。 Zend_Auth
(Zend_Auth using database)将检查数据库中是否有正确的凭据。验证用户后,您将其保存在全局可访问的位置(Zend_Auth
类具有执行此操作的方法)。这也是查询用户具有哪些角色并存储它们的好时机。
应用程序的元数据部分:我不确定问题究竟是什么,但我认为您希望存储有关用户的动态信息,并为管理员提供GUI来管理它。为什么要渲染不同类型的控件?验证信息可以通过定义许多最常见的元数据(如Twitter)并为它们创建规则来完成。在元数据的save
操作中,您将使用这些规则进行验证。
ACL:资源很少更改,最好将它们放在配置文件中(以提高速度)。你应该多考虑一下资源:它们对你来说究竟是什么?控制器?模块?创建一个插件,preDispatch
每个请求都会根据请求的资源检查登录用户的角色。例如:
$action = $request->getActionName();
$controller = $request->getControllerName();
// role, resource, privilage
if (!$acl->isAllowed($user->role, $controller, $action) {
//go to access denied page!
}
现在Zend_ACL用于全局访问规则,您最好检查操作本身内部的特定访问权限(例如if ($loggedInUser == $article->author) {//edit the article};
)。
另外不要忘记Zend_ACL可以与Zend_Navigation集成以隐藏不允许用户使用的菜单项(等等)。