Как обрабатывать управление пользователями в Django для групп, имеющих одинаковый доступ, но разные правила? - PullRequest
2 голосов
/ 22 февраля 2010

Справочная информация:

Я создал внутренний сайт для компании. Большая часть работы была направлена ​​на создание инструментов расчета, которые их продавцы могут использовать, чтобы делать предложения для клиентов. Создавайте PDF-предложения и контракты, которые можно скачать, сравнивайте цены и т. Д. Все это работает нормально.

Теперь их продавцы были разделены на две группы.

  1. Одна группа является персоналом по продаже, нанятым компанией.
  2. Другая группа - это лица, которые сами являются компанией.

Вопрос:

Моя задача сейчас заключается в том, что в некоторых случаях мне нужно отображать разные вещи в зависимости от типа продавца. Некоторые из правил для инструментов расчета будут иметь различные правила относительно того, какие числа будут разрешены и т. Д. Но большая часть сайта будет одинаковой для обеих групп.

Что бы я хотел знать, есть ли хороший способ решения этой проблемы?

Мои мысли:

Я думал об управлении этим с помощью групп, которые доступны в contrib.auth. Таким образом, я мог бы хранить единую кодовую базу, но мне пришлось бы создавать правила для множества разных мест. Правила проверки форм для проверки допустимости введенных номеров будут зависеть от группы, в которой находится пользователь. Некоторые вещи будут иметь разные имена, или рабочий процесс может немного отличаться. Некоторые инструменты будут доступны только для одной из групп. Это кажется быстрым решением здесь и сейчас, но если двум группам нужно будет все больше и больше меняться, кажется, что этим быстро станет трудно управлять.

Я также думал о создании двух разных сайтов. Идея состояла в том, чтобы создать приложения, которые используют обе группы, поэтому мне нужно было бы только написать код для этого 1 места. Тогда я мог бы создавать собственные части для каждого сайта, и мне не нужно было бы проверять пользователя в большинстве шаблонов и представлений. Но я не уверен, что это хороший способ идти о вещах. Это создаст много дополнительной работы, и если две группы могут использовать много одного и того же кода, это может не понадобиться.

Самая большая проблема в том, что я на самом деле не знаю, как это развивается, так что это может привести к тому, что две группы будут совершенно разными или с очень небольшим отличием. Что я хотел бы сделать, так это написать некоторый код, который может поддерживать оба сценария, поэтому я не буду сожалеть о своем выборе через пол года.

Итак, как вы справляетесь с этим делом управления пользователями. Я ищу методы идей или многократно используемые приложения для решения этой проблемы, а не готовое решение.

Разъяснения:

Моя проблема не в чистой презентации, которая может быть сделана с помощью шаблонов, но также в том, что к определенным инструментам расчета (заполненная форма) будут применяться различные правила / валидация, а в некоторых случаях выполненные вычисления также разные. Таким образом, они могут видеть одну и ту же форму, но им не разрешается вводить одни и те же цифры, и одни и те же цифры могут не давать одинакового результата.

Ответы [ 2 ]

1 голос
/ 22 февраля 2010

Вы можете использовать модели прокси на моделях Group и User, которые поставляются с django.

затем напишите ваши методы авторизации и расчета в прокси-модели. если новая группа добавляется позже, вам нужно только добавить / изменить методы внутри этих двух моделей прокси. затем заставьте каждый экземпляр Group и User (очевидно, только там, где это необходимо, а не буквально каждый) найти модель прокси вместо реальной модели contrib.

0 голосов
/ 22 февраля 2010

Если я правильно вас понимаю, кажется, что вы хотите, чтобы две разные группы имели доступ ко всем одинаковым представлениям, но они будут видеть разные цифры. Вы можете добиться этого эффекта, создав отдельные шаблоны для разных групп, а затем загрузив соответствующий шаблон для каждого представления в зависимости от группы текущего пользователя.

Аналогичным образом вы можете использовать контекстный процессор, чтобы поместить текущую группу в контекст для каждого представления, а затем поместить условные выражения в шаблоны, чтобы выбрать, какие числа показывать.

Другой вариант - иметь два отдельных набора представлений для двух разных групп. Затем используйте декораторы для представлений, чтобы убедиться, что группы переходят только к тем представлениям, которые им предназначены.

...