创建用户登录系统:将逻辑放入代码或数据库中

时间:2011-06-09 07:06:12

标签: php mysql database-design

我正在尝试创建一个通用的登录系统,以便它可以适用于各种应用程序。我决定系统的两个主要“部分”是User Meta Data&角色/资源/ ACL。

1。元数据

我想保留大部分数据,例如数据库中的用户可以使用哪些元数据,以便管理员可以使用某些GUI管理它们。

问题是如何配置我想要输出的方式(文本框,复选框,无线电等)。然后另一个问题是验证,过滤器。

2。 ACL

我认为对于简单的ACL,它可以正常工作。但是假设我想说用户能够修改他们拥有的帖子。在使用断言完成的Zend_ACL中。我认为这将使一个“简单”的登录系统过于复杂?我想也很难建立?


目前我有我的数据库

enter image description here

1 个答案:

答案 0 :(得分:1)

登录用户:我建议使用具有AuthloginAction的单独控制器(例如称为logoutAction)。 Zend_AuthZend_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集成以隐藏不允许用户使用的菜单项(等等)。

相关问题