access-controller/README.md
2021-05-16 20:44:11 +03:00

186 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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/)