【问题标题】:How to handle user mangement in Django for groups that has same access but different rules?如何在 Django 中为具有相同访问权限但规则不同的组处理用户管理?
【发布时间】:2011-01-19 15:29:47
【问题描述】:

背景资料:

我为一家公司创建了一个内部网站。大部分工作都用于制作销售人员可以用来为客户提供报价的计算工具。创建可下载的 pdf 报价和合同、比较价格等。所有这些都运行良好。

现在他们的销售人员被分成了两组。

  1. 一组是公司雇用的销售人员。
  2. 另一组是公司本身的人。

问题:

我现在面临的挑战是,在某些情况下,我需要根据销售人员的类型展示不同的内容。计算工具的一些规则将有不同的规则,比如允许哪些数字等。但网站的大部分内容对于两组仍然是相同的。

我想知道的是,是否有处理这个问题的好方法?

我自己的想法:

我曾考虑通过使用 contrib.auth 中提供的组来管理此问题。这样我可以保留一个单一的代码库,但必须在很多不同的地方制定规则。验证表单以检查是否允许输入的数字的规则将取决于用户所在的组。有些东西会有不同的名称,或者工作流程可能会有所不同。某些工具仅对其中一个组可用。现在这似乎是一个快速的解决方案,但如果这两个群体需要越来越多地改变,这似乎很快就会变得难以管理。

我还考虑过制作两个不同的网站。这里的想法是创建两个组都使用的应用程序,所以我只需要为那个地方编写代码。然后我可以为每个站点制作自定义部件,而无需在大多数模板和视图中检查用户。但我不确定这是否是解决问题的好方法。这会带来很多额外的工作,如果两个团队可以使用很多相同的代码,那么这可能真的不需要。

最大的担忧是我真的不知道这是如何演变的,所以最终可能会导致两组完全不同或只有很少的差异。我想做的是写一些代码,可以同时支持这两种情况,这样我就不会在半年后后悔我的选择。

那么,您如何处理这种用户管理案例。我正在寻找解决此问题的创意技术或可重复使用的应用程序,而不是现成的解决方案。

说明:

我的问题不是可以使用模板完成的纯粹演示,而且某些计算工具(填写的表格)将应用不同的规则/验证,并且在某些情况下完成的计算也将是不同的。所以他们可能会看到相同的表格,但不允许输入相同的数字,并且相同的数字可能不会给出相同的结果。

【问题讨论】:

    标签: python django user-management


    【解决方案1】:

    您可以在带有 django 的 GroupUser 模型上使用 proxy models

    然后在代理模型中编写你的授权和计算方法。如果稍后添加了一个新组,您只需要添加/更改这两个代理模型中的方法。然后让 Group 和 User 的每个实例(显然只在必要时,而不是字面上的每一个)找到代理模型而不是实际的 contrib 模型。

    【讨论】:

    • 计算是作为对象上的方法进行的,该对象包含用于计算的数据,因此无法将计算移动到用户对象。但是代理模型看起来很有趣,我会仔细看看,如果这能以某种方式帮助我。
    【解决方案2】:

    如果我的理解正确,您似乎希望两个不同的组可以访问所有相同的视图,但他们会看到不同的数字。您可以通过为不同的组制作单独的模板,然后根据当前用户的组为每个视图加载适当的模板来实现此效果。

    同样,您可以使用上下文处理器将当前组放入每个视图的上下文中,然后将条件放入模板中以选择要显示的数字。

    另一种选择是为两个不同的组设置两组不同的视图。然后在视图上使用装饰器,以确保组只访问适合他们的视图。

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2012-10-09
      • 2021-02-28
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2016-04-27
      相关资源
      最近更新 更多