Php 如何有效地处理用户角色?

Php 如何有效地处理用户角色?,php,authentication,Php,Authentication,这有点含糊不清,所以这里是肉质的东西: 我见过认证系统执行以下操作之一 每个角色都有一个单独的角色表和一个单独的权限表,所有用户都在一个表中 为管理员准备一个单独的表 我知道,我错过了很多。但我真正想问的是: 我应该如何设计我的数据库在一个网站,我有很多种用户,每一个不同的访问 如果我决定添加具有其他类型权限的其他类型的用户,我将如何使脚本足够灵活 我目前有一个用户类,并计划使我的管理员类扩展该用户类。或者,如果我可以将它们全部放在一个类中,并且只分配必要的权限,这是否有点过分了?您可以拥有表-

这有点含糊不清,所以这里是肉质的东西:

我见过认证系统执行以下操作之一

  • 每个角色都有一个单独的角色表和一个单独的权限表,所有用户都在一个表中
  • 为管理员准备一个单独的表
  • 我知道,我错过了很多。但我真正想问的是:

    我应该如何设计我的数据库在一个网站,我有很多种用户,每一个不同的访问

    如果我决定添加具有其他类型权限的其他类型的用户,我将如何使脚本足够灵活

    我目前有一个用户类,并计划使我的管理员类扩展该用户类。或者,如果我可以将它们全部放在一个类中,并且只分配必要的权限,这是否有点过分了?

    您可以拥有表-

    user (user_id, name ...)
    permission (perm_id, name, desc)
    role (role_id, title)
    user_role (user_id, role_id)
    user_permission (user_id, perm_id)
    role_permission (role_id, perm_id)
    

    这样,您可以根据需要在系统中拥有任意多个角色,并且您同时拥有角色级权限和用户级权限

    您可以添加额外的抽象级别。基本上,您可以在数据库中添加一个表来管理用户组,并为这些组分配组权限。不同的用户可以有多个组


    通过这种方式,您可以快速将权限更改为预定义的规则集,而无需单独更改每个用户。您还可以立即更改一组用户的权限

    我认为您需要考虑以下几个概念。第一个是访问控制列表(),第二个是身份验证

    在ACL中,您可以定义资源,这些资源是要限制访问的对象,角色是可能请求访问资源的对象

    我实现ACL的方式是使用。我有一个名为
    user\u roles

    user_roles('user_role_id', 'name', 'permissions', 'parent_role_id')`
    
    我还有一个名为
    user\u role\u maps
    的表,该表将用户ID映射到用户角色ID。(您可以将其作为用户表上的一列,但这取决于您对规范化的看法;-)。然后,我可以从该表构造我的Zend_Acl对象,然后,当对用户进行身份验证时,我可以确定他们有权访问哪些资源,以及他们可以对资源执行哪些操作。(一个资源实现了
    Zend\u Acl\u resource\u接口
    ,因此它可以被
    Zend\u Acl
    识别为一个资源

    至于身份验证,这是一个更简单的概念(在我看来),您可能已经自己找到了某种形式的令牌匹配身份验证系统。关键的方面是使用经过身份验证的用户的ID来确定他们的角色。Zend Framework还为此提供了一个包

    我在这里使用了很多Zend Framework推荐,原因是他们的软件包很少依赖于其他软件包,因此插入组件非常简单。我相信其他框架提供了ACL软件包,您可以使用这些软件包,如果您有时间和理解的话,也可以推出自己的软件包

    祝你好运