# ZenDesk Access Controller ## Управление правами доступа Идея - написать программу(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` файл. ```bash cp .env.example .env ``` Установить модули для работы js ```bash sudo apt install npm cd static/main/js/control_page npm install sudo npm -g install npx npx webpack ``` Заменить переменные в `.env` на актуальные. ```bash 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 ```bash sudo apt install npm ``` 2. Перейти в static папку со страницей управления: ```bash cd static/main/js/control_page ``` 3. Выполнить установку модулей для js ```bash npm install sudo npm -g install npx npx webpack ``` 4. Тестирование в той же папке ```bash 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_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 .` - Выполнить команду ```bash docker run -d -p 8000:8000 \ ACTRL_DEBUG={0/1} \ ACTRL_HOST={HOSTNAME} \ ACTRL_SECRET_KEY={DJANGO_SECRET_KEY} \ ACTRL_EMAIL_HOST={SMTP_HOST} \ ACTRL_EMAIL_PORT={SMTP_PORT} \ ACTRL_EMAIL_TLS={USE_TLS} \ ACTRL_EMAIL_HOST_USER={USERNAME} \ ACTRL_EMAIL_HOST_PASSWORD={PASSWORD} \ ACTRL_FROM_EMAIL={EMAIL} \ ACTRL_SERVER_EMAIL={EMAIL} \ ACTRL_API_EMAIL={EMAIL} \ ACTRL_API_PASSWORD={PASSWORD} \ ACTRL_API_TOKEN={API_TOKEN} \ ACTRL_ZENDESK_SUBDOMAIN={DOMAIN} \ ENG_CROLE_ID={ENGINEER_CUSTOM_ROLE_ID} \ LA_CROLE_ID={LIGHT_AGENT_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} \ -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` (на другом домене нужно будет создать сначала пользователей в песочнице с правами админа и легкого агента с этими же почтами, назначить им организацию `SYSTEM`) ## Параметры тестовой песочницы: Пример полной конфигурации можно найти в [.env.example](.env.example). Почту и токен админа ZenDesk взять у руководителя (если вы не админ). ## Read more - Zenpy: [http://docs.facetoe.com.au](http://docs.facetoe.com.au) - Zendesk API: [https://developer.zendesk.com/rest_api/docs/](https://developer.zendesk.com/rest_api/docs/)