2021-04-19 17:52:10 +03:00
2021-05-29 07:30:22 -07:00
2021-05-19 23:58:30 -07:00
2021-05-29 07:30:22 -07:00
2021-02-04 20:01:35 +03:00
2021-05-29 07:30:22 -07:00
2021-05-10 08:14:41 -07:00
2021-05-29 14:22:23 -07:00
2021-05-29 15:11:52 -07:00

Управление правами доступа

Идея - написать программу(Web приложение), которая будет выдавать права пользователям системы по запросу самого пользователя. Например, из 12 человек 3 сейчас работают с правами админа, по окончании рабочей смены они сдают свои права (освобождают места) и другие пользователи могут запросить эти права в свое пользование.

Оставшиеся 9 человек получают права легкого агента - без прав редактирования, а только чтение.

Из технологий - программа должна взаимодействовать с api системы Zendesk(система обращений клиентов - жалобы), проверять авторизованного пользователя на права(будет возможность менять права напрямую из Zendesk - нужна синхронизация прав с приоритетом у Zendesk).

Если руками в самом Zendesk права у пользователя отобрали или наоборот присвоили, то наша программа обновляет статус пользователя в соответствии с данными синхронизации (например, раз в минуту).

Так же в идеале должна быть проверка, что пользователь сайта существует на сайте Zendesk(по токену).

Сэндбокс Zendesk нам предоставит моя компания, библиотеку для работы с api уже подсказали. Сама программа (наша) будет обладать админскими правами и реализовывать контроль и выдачу прав другим пользователям.

Итого:

  1. Реализовать авторизацию пользователей с проверкой по API на существование такого пользователя
  2. Реализовать интерфейс со статистикой рабочих мест(занято, свободно, кто занимает)
  3. Реализовать логирование действий(когда взял права, когда отдал - запись в файл и БД)
  4. Реализовать передачу прав приложением по запросу от пользователя и замену прав пользователя у которого права отбираются внутри Zendesk (на легкий агент)
  5. Реализовать синхронизацию по API на проверку прав(не менялись ли в системе Zendesk)
  6. Реализовать возможность добавить большее количество админских прав
  7. Реализовать возможность добавления легких агентов(права только на просмотр)
  8. Реализовать на общей странице текущую информацию о пользователе - текущие права, карточка пользователя

Технологический стек:

  • Python 3
  • Django 3

Quickstart

Перед запуском необходимо создать .env файл.

cp .env.example .env

Установить модули для работы js

sudo apt install npm
cd main/control_page_js_modules/
npm install
sudo npm -g install npx
npx webpack

Заменить переменные в .env на актуальные.

sudo apt install make
pip install --upgrade pip
pip install -r requirements/dev.txt
./manage.py migrate
./manage.py loaddata data.json
./manage.py runserver

Перед запуском для тестирования:

Убедитесь, что вы зарегистрированы в песочнице ZenDesk, у вас назначена организация SYSTEM Для админов ZenDesk дополнительно - создайте токен доступа в ZenDesk При запуске в Docker убедитесь что папка, которая будет служить хранилищем для БД, открыта на запись и чтение

Для запуска тестов страницы управления:

  1. Установить npm и npx
sudo apt install npm
  1. Перейти в static папку со страницей управления:
cd main/control_page_js_modules/
  1. Выполнить установку модулей для js
npm install
sudo npm -g install npx
npx webpack
  1. Тестирование в той же папке
npm test

Запуск на локальной машине:

  • Скопировать репозиторий на локальную машину
  • Перейти в папку приложения
  • Активировать виртуальное окружение
  • Выполнить команду pip install -r requirements/dev.txt
  • В файл .env добавить следующие переменные:
ACTRL_DEBUG={0/1} - включить режим дебага
ACTRL_HOST={HOSTNAME} - при запуске без дебага, надо указать домен на котором будет работать приложение
ACTRL_SECRET_KEY={DJANGO_SECRET_KEY} - секретный ключ сгенерированный Django

ACTRL_EMAIL_HOST={SMTP_HOST} - домен почтового сервера через который приложение будет отправлять письма, например "smtp.gmail.com"
ACTRL_EMAIL_PORT={SMTP_PORT} - порт для почтового сервера, например 587, 465 , 2525
ACTRL_EMAIL_TLS={USE_TLS} - использовать TLS для подключения к почтовому серверу, 0 или 1
ACTRL_EMAIL_HOST_USER={USERNAME} - логин с которым приложение входит на почтовый сервер
ACTRL_EMAIL_HOST_PASSWORD={PASSWORD} - пароль/ключ с которым приложение входит на почтовый сервер
ACTRL_FROM_EMAIL={EMAIL} - адрес с которого приложение отправляет письма
ACTRL_SERVER_EMAIL={EMAIL} - адрес на который отвечают пользователя
ACTRL_DOCS_URL={URL} - URL на котором лежит документация

ACTRL_API_EMAIL={EMAIL} - почта админа в ZenDesk
ACTRL_API_PASSWORD={PASSWORD} - пароль админа ZenDesk
ACTRL_API_TOKEN={API_TOKEN} - API токен зендеск
ACTRL_ZENDESK_SUBDOMAIN={DOMAIN} - домен ZenDesk

ENG_CROLE_ID={ENGINEER_CUSTOM_ROLE_ID} - id роли инженера( custom_role_id сотрдника смены)
LA_CROLE_ID={LIGHT_AGENT_CUSTOM_ROLE_ID} - id роли легкого агента (custom_role_id роли -легкий агент)
EMPL_GROUP={EMPLOYEE_GROUP_NAME} - имя группы которой принадлежат сотрудники ССКС
BUF_GROUP={BUFFER_GROUP_NAME} - имя буферной группы для передачи смен(через нее происходит управление тикетами)
ST_EMAIL={SOLVED_TICKETS_EMAIL} - почта на которую будут переназначятся закрытые тикеты
LICENSE_NO={LICENSE_NO} - количество лицензий, отображаемых как доступные в приложении
SHIFTH={SHIFT_HOURS} - количество часов в рабочей смене (нужно для статистики, пока не реализовано но требует указания значения)
  • Выполнить команду python manage.py migrate
  • Запустить приложение командой python manage.py runserver (можно указать в параметрах для файла manage.py)
  • Перейти по ссылке в консоли (вероятнее всего откроется по адресу http://127.0.0.1:8000/)

Запуск в Docker:

Требуется установленный и настроенный Docker

  • Скопировать репозиторий на локальную машину
  • В командной строке перейти в папку проекта
  • Выполнить команду docker build --tag access_controller:latest .
  • Выполнить команду
docker run -d -p 8000:8000 \
  -e ACTRL_DEBUG={0/1} \
  -e ACTRL_HOST={HOSTNAME} \
  -e ACTRL_SECRET_KEY={DJANGO_SECRET_KEY} \
  -e ACTRL_EMAIL_HOST={SMTP_HOST} \
  -e ACTRL_EMAIL_PORT={SMTP_PORT} \
  -e ACTRL_EMAIL_TLS={USE_TLS} \
  -e ACTRL_EMAIL_HOST_USER={USERNAME} \
  -e ACTRL_EMAIL_HOST_PASSWORD={PASSWORD} \
  -e ACTRL_FROM_EMAIL={EMAIL} \
  -e ACTRL_SERVER_EMAIL={EMAIL} \
  -e ACTRL_API_EMAIL={EMAIL} \
  -e ACTRL_API_PASSWORD={PASSWORD} \
  -e ACTRL_API_TOKEN={API_TOKEN} \
  -e ACTRL_ZENDESK_SUBDOMAIN={DOMAIN} \
  -e ENG_CROLE_ID={ENGINEER_CUSTOM_ROLE_ID} \
  -e LA_CROLE_ID={LIGHT_AGENT_CUSTOM_ROLE_ID} \
  -e EMPL_GROUP={EMPLOYEE_GROUP_NAME} \
  -e BUF_GROUP={BUFFER_GROUP_NAME} \
  -e ST_EMAIL={SOLVED_TICKETS_EMAIL} \
  -e LICENSE_NO={LICENSE_NO} \
  -e SHIFTH={SHIFT_HOURS} \
  -e ACTRL_DOCS_URL={URL} \
  -v {ABSOLUTE_PATH_TO_DB}:/zendesk-access-controller/db \
  access_controller:latest
  • открываем запущенный контейнер в браузере (можно перейти по ссылке http://localhost:8000/)

Запуск с тестовыми юзерами:

На локальной машине - перед запуском команды python manage.py runserver выполнить команду python manage.py loaddata data.json Это создаст тестового админа и тестового пользователя в приложении для песочницы ZenDesk.

  • Админ - admin@gmail.com / zendeskadmin
  • Пользователь - 123@test.ru / zendeskuser

Не сработает если домен песочницы отличается от ngenix1612197338 (на другом домене нужно будет создать сначала пользователей в песочнице с правами админа и легкого агента с этими же email, назначить им организацию SYSTEM)

Параметры тестовой песочницы:

Пример полной конфигурации можно найти в .env.example. Почту и токен админа ZenDesk взять у руководителя (если вы не админ).

Для проверки pylint используем:

pylint main

Для приведения файлов к стандарту PEP8 используем:

autopep8 --in-place filename

##Для проверки орфографии:

cd docs
make spelling

##Для обновления документации:

./documentation.sh

Read more

Description
No description provided
Readme 2.8 MiB
Languages
Python 70.3%
HTML 14.3%
JavaScript 11.4%
SCSS 2.4%
CSS 0.8%
Other 0.8%