【发布时间】:2010-01-17 10:22:06
【问题描述】:
我正在为结构工程师开发一个带有一套钢结构设计工具的 Django Web 应用程序。每个设计工具都有一个输入数据库表,每个表的每一行都对应于要“解决”的特定设计条件。用户可以单独工作,也可以分组工作。每个用户都需要持续访问自己的工作,以便改进、复制和调整设计,并在方便时创建报告,通常在项目结束时需要硬拷贝文档。然后,对于给定的设计项目,数据库内容必须在以数月甚至数年为单位的时间段内发生的任意数量的会话中可用。
如果有一组用户,通常都与给定的设计办公室相关联,那么他们所有人共同和相互访问彼此的工作可能是可以接受的。该应用程序支持常规的工程生产活动,而不是创新的知识产权工作,而且内部隐私无论如何都不是行业的常态。但是,绝对必须保护作品不被团队外的窥探。理想情况下,每个组都应有一个或多个超级用户被授权监管该组的成员。他们可能需要的主要工具是能够从组中删除成员,停止他的访问权限。这将是用户组超级用户,与站点端的超级用户不同。
为了方便访问,每个数据库表的每一行都将与一个项目编号/项目名称对相关联,这对部署用户或用户组的给定公司来说是唯一的。不同的公司可以很容易地选择使用重复的项目编号,甚至可以选择重复的项目名称,因此准确区分哪些数据库行属于给定用户(或组)可能必须在单独的相关“所有权列表”中进行跟踪" 每个用户(或组)的表。
预计(希望)最终,数百名与不同(通常是相互竞争的)公司相关的用户(或用户组)将使用这些工具为数千个项目解决数以万计的设计条件。
所以,这是我的问题:
首先,尝试从 Django contrib.auth 代码中挽救很多东西有什么意义吗?在我看来,contrib.auth 专为适合博客圈和网络新闻的身份验证和访问控制而设计,但不支持对“内容”访问的细粒度控制。
其次,是否有任何可用的模板、模式、示例、策略或设计建议可以应用于此问题?
【问题讨论】:
-
这个项目听起来很棒。你必须在 Django 中完成。结果如何?
-
我也解决了。您的第 3 段是问题所在:无论您对项目的定义是什么,您都应该为它生成一个密钥,用于将数据与其关联。永远不要依赖人工输入。对此的一个很好的测试是输入(例如项目名称)应该随时可以更改。然后你就说这个项目(id=12345abc)分配了这些组,这些组有这些用户。只允许具有该权限链的用户查看项目数据。
标签: django authentication controls