127 lines
9.2 KiB
Markdown
127 lines
9.2 KiB
Markdown
# 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
|
||
```bash
|
||
sudo apt install make
|
||
pip install --upgrade pip
|
||
pip install -r requirements.txt
|
||
./manage.py migrate
|
||
./manage.py loaddata data.json
|
||
./manage.py runserver
|
||
```
|
||
|
||
##ZenDesk Access Controller instruction for eng
|
||
|
||
##Перед запуском для тестирования:
|
||
|
||
Убедитесь, что вы зарегистрированы в песочнице ZenDesk, у вас назначена организация (SYSTEM)
|
||
Для админов ZenDesk дополнительно - создайте токен доступа в ZenDesk
|
||
При запуске в Docker убедитесь что папка, которая будет служить хранилищем для БД, открыта на запись и чтение
|
||
|
||
|
||
##Запуск на локальной машине:
|
||
|
||
скопировать репозиторий на локальную машину
|
||
перейти в папку приложения
|
||
активировать вирутальное окружение
|
||
выполнить команду pip install -r requirements.txt
|
||
в вирутальное окружение добавить следующие переменные :
|
||
|
||
|
||
ACCESS_CONTROLLER_API_EMAIL={EMAIL} - почта админа в ZenDesk
|
||
ACCESS_CONTROLLER_API_PASSWORD={PASSWORD} - пароль админа ZenDesk
|
||
ACCESS_CONTROLLER_API_TOKEN={API_TOKEN} - API токен зендеск
|
||
ZD_DOMAIN={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 makemigrations
|
||
выполнить команду python manage.py migrate
|
||
запустить приложение командой python manage.py runserver (можно указать в параметрах для файла manage.py)
|
||
перейти по ссылке в консоли (вероятнее всего откроется по адресу http://127.0.0.1:8000/)
|
||
|
||
|
||
##Запуск в Docker:
|
||
Требуется установленный и настроеный Docker
|
||
|
||
скопировать репозиторий на локальную машину
|
||
в командной строке перейти в папку проекта
|
||
выполнить команду docker build .
|
||
выполнить команду docker images (нам нужен id созданного образа)
|
||
выполнить команду docker run -d -p 8000:8000 -e ACCESS_CONTROLLER_API_EMAIL={EMAIL} -e ACCESS_CONTROLLER_API_PASSWORD={PASSWORD}
|
||
...(перечисляем все параметры виртуального окружени разделяя их -e) -v {абсолютный путь к папке, в которой будет размещена база}:/zendesk-access-controller/db {id образа докера}
|
||
открываем запущеный контейнер в браузере (можно перейти по ссылке http://localhost:8000/)
|
||
|
||
|
||
##Запуск с тестовыми юзерами:
|
||
|
||
На локальной машине - перед запуском команды python manage.py runserver выполнить команду python manage.py loaddata data.json
|
||
Это создаст тестового админа и тестового пользователя в приложении для песочницы ZenDesk. Админ - admin@gmail.com / zendeskadmin , пользователь - 123@test.ru / zendeskuser .
|
||
Не сработает если домен песочницы отличается от ngenix1612197338 (на другом домене нужно будет создать сначала пользователей в песочнице с правами админа и легкого агента
|
||
с этими же почтами, назначить им организацию (SYSTEM))
|
||
|
||
|
||
##Параметры тестовой песочницы:
|
||
|
||
ACCESS_CONTROLLER_API_EMAIL={EMAIL} - почта админа в ZenDesk - взять у роководителя(если вы не админ)
|
||
ACCESS_CONTROLLER_API_PASSWORD={PASSWORD} - пароль админа ZenDesk - взять у роководителя(если вы не админ)
|
||
ACCESS_CONTROLLER_API_TOKEN={API_TOKEN} - API токен зендеск - взять у роководителя(если вы не админ)
|
||
ZD_DOMAIN=ngenix1612197338
|
||
ENG_CROLE_ID=360005209000
|
||
LA_CROLE_ID=360005208980
|
||
EMPL_GROUP=Поддержка
|
||
BUF_GROUP=Сменная группа
|
||
ST_EMAIL=d.krikov@ngenix.net
|
||
|
||
LICENSE_NO=3
|
||
SHIFTH=12
|
||
|
||
|
||
## 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/)
|