【问题标题】:Tips for developing app with different permission levels开发具有不同权限级别的应用程序的提示
【发布时间】:2008-12-28 08:43:56
【问题描述】:

在我们开发需要为每个用户分配权限级别的应用程序时,是否有人有任何提示。权限级别将决定用户可以使用哪些功能。

有什么建议吗?

您(您)将如何在您的应用程序中使用此类功能?

【问题讨论】:

    标签: permissions


    【解决方案1】:

    首先你需要弄清楚你的权限系统想要涵盖哪些功能,以及详细程度:

    • 访问表(列表、CRUD)

    • 函数/模块

    • 记录级别的访问 (=ACL)

    • 肯定(授予)或否定(撤销)语义

    • “管理员”角色允许做什么

    如果您想限制对表的访问,您可以轻松设置一个包含所有表名的附加表,并授予对角色/组的 select-list/select-record/insert/update/delete 访问权限,如图所示合资公司。

    如果您想授予对函数或模块的访问权限,请拥有一个模块表并将执行权限授予角色/组。

    这两个功能都等同于 SQL 中的授权。

    记录级别的访问限制要复杂得多,因为您需要对记录状态(例如 CMS 应用中的“公共”、“私人”、“已发布”)的访问权限进行建模,或者对每个记录都有明确的权限记录。

    如果您想实现与 NTFS 等效的权限方案,您可以根据用户分配到的组计算每条记录的权限,并拥有可能覆盖组权限的用户特定权限,并撤销覆盖授权。

    我的应用程序通常在表+函数/组级别上工作,这可能就足够了,具体取决于您的要求。

    【讨论】:

      【解决方案2】:

      这是 Turbogears,Python 中身份模块的部分 ER 图。它实现了您所期待的。用户与组关联,组具有关联的权限。

      可以实现受限功能可用性的两种方式是:

      1. (我更喜欢)在您的控制器中检查用户所属的组,并据此调整您对视图的响应。因此 View 只是一个渲染器 - 没有业务逻辑。
      2. 视图获取用户详细信息,如组和权限,并决定显示什么和不显示什么(违反 MVC)。

      阅读有关 MVC(可能还有 Turbogears)的更多信息。

      alt text http://jaivikram.verma.googlepages.com/temp.jpeg

      【讨论】:

        【解决方案3】:

        这在很大程度上取决于您使用的语言和应用程序的架构(网络服务?客户端软件?)。

        对于一个服务器玩具项目,我想为每个命令分配一个最低权限级别,并在收到命令网络数据包时直接检查,当用户级别不够高时触发权限错误。我可能不适合其他架构。

        【讨论】:

        • C#,客户端/服务器桌面应用程序
        【解决方案4】:

        追求“关卡”的概念可能有点死胡同。它可能适合您当前的应用程序,但是由角色到权限的映射组成的数据模型更通用,适合大多数用途。

        为用户分配角色。一个用户可能有多个角色,他们的角色定义了他们拥有的权限。这个概念类似于组,但是“角色”通常很容易直接映射到业务逻辑(想想诸如“管理员”、“用户”、“职员”、“客户经理”、“区域经理”等角色)。特权也相当直接地映射到函数和数据对象。您还可以映射到使用底层平台访问控制(例如 Java 权限)的实现。

        在控制器代码中,您(通过他们的角色)检查用户是否拥有执行功能所需的权限。修改视图以隐藏用户无权执行的功能也是一种很好的做法。

        在您的设计中,您可以将访问控制系统可视化/记录为矩阵(角色到权限)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-02
          • 2011-08-31
          • 2018-04-03
          • 2011-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多