【问题标题】:Access control for multiple users in a web applicationWeb 应用程序中多个用户的访问控制
【发布时间】:2008-10-21 00:38:59
【问题描述】:

我正在开发一个 PHP + MySQL 社交网络应用程序,现在我需要为全局(所有项目)和/或自身项目(自己创建的项目)设置不同的访问控制(读取、创建、编辑、删除) ) 为每个模块分组或特定用户。

有没有人对此提出建议(表格结构等)?


好的,我在这里提供更多细节,目前我有一个 tbl_module、tbl_user 和 tbl_user_role。每个用户和角色可以对特定模块具有不同的访问权限。

  • 阅读
  • 更新
  • 创建
  • 删除

并由全局访问或仅限自己(自己的帐户或自己创建的记录)划分。

和我目前的方法:我创建另一个表来保存访问详细信息:

  • acl_uid
  • mod_id(fk 模块 uid)
  • target_id(fk 用户 uid 或角色 uid)
  • acl_type(用于标识目标id引用的用户/角色)
  • acl_read
  • acl_update
  • acl_create
  • acl_delete

acl_read、acl_update、acl_create、acl_delete 取值范围:

  • 0 拒绝
  • 1 允许
  • 2 指低优先级检查(如果用户有值 2 则指角色)
  • 3 只自己

我相信有更有效的方法来解决这个问题,或者可以改进我目前的方法。

感谢您的回复。

【问题讨论】:

    标签: php mysql database


    【解决方案1】:

    这是一个相当宽泛的问题,因此您可能只会得到非常宽泛的答案。

    大多数 CMS 系统都有一个表格,列出了可以在系统上生成的内容类型。

    另一个表格描述了每种类型的内容如何显示(在首页、各个博客页面等)。

    另一个表为每个用户提供一个或多个“用户类型”或“组”,例如管理员、未注册用户、版主等。

    最后一个表是某种访问表 - 它显示了每个组有权执行的操作,包括它可以创建、编辑、发布的内容类型等。

    我建议您花一点时间研究其他 CMS 软件的数据库架构,例如 SlashcodeDrupal 或其他数百万个 CMS 系统之一。

    -亚当

    【讨论】:

      【解决方案2】:

      这实际上是一个非常广泛的问题。假设您有明确的应用程序层分离(例如,使用 MVC),那么这就是业务层中的内容。

      根据您的直接要求,这可能相当简单。在您的用户表中,有一个 hasEdit、hasView 等。对于每个项目,附加一个用户 ID 代表创建者。在业务层中,规则是如果他们是创建者,则他们有编辑权限,或者他们有 hasEdit = true。

      提升一个档次,如果你有不同的类型,并且 hasEdit 权限是per-type,你需要另一个实体。

      用户权限

      • userPermissionId
      • userId (FK)
      • typeId (FK)
      • hasEdit(布尔值)
      • 有视图
      • 等等..

      要确定他们是否有编辑权限,您可以检查他们是否是所有者,或者在 userPermission 表中查找该项目类型和当前用户,然后检查 hasEdit。您可以制定其他规则,例如将全局 hasEdit 放在用户表中。或者通过 userPermissionId 中的条目来表示全局 hasEdit,其 typeId 为 NULL。

      这可能会变得更加复杂,使用角色和可变数量的权限.. 这一切都取决于您的要求。您需要仔细指定您的业务需求(提出一堆用例),然后您可以从那里进行设计。事实上,没有足够的信息比我在这里概述的更多(甚至这可能不是你所需要的)。

      【讨论】:

        【解决方案3】:

        我喜欢使用一种防火墙规则方法或类似的 mysql 表规则方法:您可以授予用户或用户组对某些对象或对象组的某些权限。使每条规则成为规则表中的一行。当您需要执行编辑等操作时,您可以在规则表上为当前用户、当前用户组、布尔编辑列和对象 ID 或对象组进行内部连接。如果您返回任何行,则授予权限。

        【讨论】:

          【解决方案4】:

          设计安全性的方法有很多种,我喜欢不同的方法。有 UNIX 风格的用户组其他。我碰巧喜欢PmWiki's security model

          我开发了一个使用类似于Apache 的用户角色权限结构的网站。在那个网站上,我使用了一个模板系统,它使用了一个包含头文件和页脚包含文件的“标准内容”来包装页面内容。具有受限内容的页面可以将变量设置为所需的权限,头脚本会查找该变量,如果设置,则调用验证函数来检查用户是否属于该权限的角色。

          使用 user-role-permissions 模型的好处是,如果您的大多数用户都属于简洁的授权类别,那么为用户设置授权就是为该用户添加正确角色的简单问题。权限与角色相关联,而不是直接与用户相关联,因此您可以轻松调整整个用户类别的权限。

          【讨论】:

            猜你喜欢
            • 2018-08-18
            • 1970-01-01
            • 1970-01-01
            • 2022-07-06
            • 1970-01-01
            • 2015-08-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多