如何在Django中处理具有相同访问权限但规则不同的组的用户管理?

时间:2010-02-22 13:27:00

标签: python django user-management

背景资料:

我为公司创建了一个内部网站。大部分工作已经用于制作计算工具,销售人员可以使用这些工具为客户提供报价。创建可以下载的pdf优惠和合同,比较价格等。所有这些工作正常。

现在他们的销售人员分为两组。

  1. 一个团体是公司雇用的销售人员。
  2. 另一组是公司自己的人。
  3. 问题:

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

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

    我自己的想法:

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

    我还想过制作两个不同的网站。这里的想法是创建两个组都使用的应用程序,所以我只需要为这个地方制作代码。然后我可以为每个站点制作自定义部件,而不需要在大多数模板和视图中检查用户。但我不确定这是否是一个很好的方法。它会创建大量的额外工作,如果这两个组可以使用很多相同的代码,那么可能并不需要这样做。

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

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

    澄清:

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

另一种选择是为两个不同的组提供两组独立的视图。然后在视图上使用装饰器以确保组仅转到适合它们的视图。