Плохо ли использовать одну глобальную константу?

206 просмотра
0

Всем привет.
Пишу программу в которой у меня есть логин и пароль для каждого пользователя + права доступа.
Вот у меня вопрос. Мне нужно на протяжении всей программы хранить права доступа пользователя.
Права доступа используются в разных классах функциях и файлах программы.
Мне кажется самым простым решением создать одну глобальную константу в которой будут храниться права доступа.
Но слышал что глобальные переменные зло. Но не передавать из класса в класс переменную в которой будет написано «admin» или «work».
Скажите что вы думаете по этому поводу?


Добавить комментарий

2 Answers

Python Опубликовано 16.12.2018
0

ИМХО идеальным вариантом будет вынести код для проверок прав доступа из отдельных методов с специальный класс (ACL). При создании объекта acl передавать ему логин/пароль/права доступа, всё что может потребоваться для вычисления прав. И уже этот объект передавать из класса в класс.

Но проектировать api и структуру такой махины — довольно сложно и занимает кучу времени. Если вы делаете прототип или что-либо вроде proof-of-concept, то вполне подойдут и глобальные переменные, лижбы это работало и можно было «потыркать».

Плюсы ACL:

  1. Легче теститьвать
  2. Можно отдельно тестирьвать ACL и методы доступа/изменения данных
  3. Проще модифицировать (добавлять новые роли/типы пользователей).
  4. Проще повторно использовать.

Минусы:

  1. Нужно передавать в каждый класс который хочет работать с парвами (решается через DI)
  2. Требует больше сил на первоначальное создание (проектирование api, возможность расширения …)

Плюсы глобальной переменной:

  1. Нет необходимости делать DI.
  2. Нет необходимости заранее продумывать API для пользователей
  3. Можно сразу начинать фигачить код 🙂

Минусы:

  1. Тестировать код который зависит от глобального (внешнего) состояния значительно сложнее.
  2. Меньше возможностей повторно использовать (если есть несколько методов работающих с одним и темже объектом, то код проверки доступа придётся дублировать)
  3. Если код проверки прав, размазан по всему проекту, то добавить новый тип пользователя будет значительно сложнее.
Добавить комментарий
0

Python: How to make a cross-module variable?—django settings пример.

Кратко: если переменная после инициализации программы не меняется, то вполне оправдано глобальный config объект, получаемый по вызову функции иметь (последнее чтобы тестовый config легче было заводить). Ещё пример: create_app() для flask.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up