【发布时间】:2008-12-28 08:43:56
【问题描述】:
在我们开发需要为每个用户分配权限级别的应用程序时,是否有人有任何提示。权限级别将决定用户可以使用哪些功能。
有什么建议吗?
您(您)将如何在您的应用程序中使用此类功能?
【问题讨论】:
标签: permissions
在我们开发需要为每个用户分配权限级别的应用程序时,是否有人有任何提示。权限级别将决定用户可以使用哪些功能。
有什么建议吗?
您(您)将如何在您的应用程序中使用此类功能?
【问题讨论】:
标签: permissions
首先你需要弄清楚你的权限系统想要涵盖哪些功能,以及详细程度:
访问表(列表、CRUD)
函数/模块
记录级别的访问 (=ACL)
肯定(授予)或否定(撤销)语义
“管理员”角色允许做什么
如果您想限制对表的访问,您可以轻松设置一个包含所有表名的附加表,并授予对角色/组的 select-list/select-record/insert/update/delete 访问权限,如图所示合资公司。
如果您想授予对函数或模块的访问权限,请拥有一个模块表并将执行权限授予角色/组。
这两个功能都等同于 SQL 中的授权。
记录级别的访问限制要复杂得多,因为您需要对记录状态(例如 CMS 应用中的“公共”、“私人”、“已发布”)的访问权限进行建模,或者对每个记录都有明确的权限记录。
如果您想实现与 NTFS 等效的权限方案,您可以根据用户分配到的组计算每条记录的权限,并拥有可能覆盖组权限的用户特定权限,并撤销覆盖授权。
我的应用程序通常在表+函数/组级别上工作,这可能就足够了,具体取决于您的要求。
【讨论】:
这是 Turbogears,Python 中身份模块的部分 ER 图。它实现了您所期待的。用户与组关联,组具有关联的权限。
可以实现受限功能可用性的两种方式是:
阅读有关 MVC(可能还有 Turbogears)的更多信息。
【讨论】:
这在很大程度上取决于您使用的语言和应用程序的架构(网络服务?客户端软件?)。
对于一个服务器玩具项目,我想为每个命令分配一个最低权限级别,并在收到命令网络数据包时直接检查,当用户级别不够高时触发权限错误。我可能不适合其他架构。
【讨论】:
追求“关卡”的概念可能有点死胡同。它可能适合您当前的应用程序,但是由角色到权限的映射组成的数据模型更通用,适合大多数用途。
为用户分配角色。一个用户可能有多个角色,他们的角色定义了他们拥有的权限。这个概念类似于组,但是“角色”通常很容易直接映射到业务逻辑(想想诸如“管理员”、“用户”、“职员”、“客户经理”、“区域经理”等角色)。特权也相当直接地映射到函数和数据对象。您还可以映射到使用底层平台访问控制(例如 Java 权限)的实现。
在控制器代码中,您(通过他们的角色)检查用户是否拥有执行功能所需的权限。修改视图以隐藏用户无权执行的功能也是一种很好的做法。
在您的设计中,您可以将访问控制系统可视化/记录为矩阵(角色到权限)。
【讨论】: