diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..7a4e6ec --- /dev/null +++ b/README.rst @@ -0,0 +1,201 @@ + +Управление правами доступа +-------------------------- + +Идея - написать программу(Web приложение), которая будет выдавать права пользователям системы по запросу самого +пользователя. Например, из 12 человек 3 сейчас работают с правами админа, по окончании рабочей смены они сдают +свои права (освобождают места) и другие пользователи могут запросить эти права в свое пользование. + +Оставшиеся 9 человек получают права легкого агента - без прав редактирования, а только чтение. + +Из технологий - программа должна взаимодействовать с api системы Zendesk(система обращений клиентов - жалобы), +проверять авторизованного пользователя на права(будет возможность менять права напрямую из Zendesk - нужна +синхронизация прав с приоритетом у Zendesk). + +Если руками в самом Zendesk права у пользователя отобрали или наоборот +присвоили, то наша программа обновляет статус пользователя в соответствии с данными синхронизации +(например, раз в минуту). + +Так же в идеале должна быть проверка, что пользователь сайта существует на сайте Zendesk(по токену). + +Сэндбокс Zendesk нам предоставит моя компания, библиотеку для работы с api уже подсказали. +Сама программа (наша) будет обладать админскими правами и реализовывать контроль и выдачу прав другим пользователям. + +*Итого:* + + +#. Реализовать авторизацию пользователей с проверкой по API на существование такого пользователя +#. Реализовать интерфейс со статистикой рабочих мест(занято, свободно, кто занимает) +#. Реализовать логирование действий(когда взял права, когда отдал - запись в файл и БД) +#. Реализовать передачу прав приложением по запросу от пользователя и замену прав пользователя + у которого права отбираются внутри Zendesk (на легкий агент) +#. Реализовать синхронизацию по API на проверку прав(не менялись ли в системе Zendesk) +#. Реализовать возможность добавить большее количество админских прав +#. Реализовать возможность добавления легких агентов(права только на просмотр) +#. Реализовать на общей странице текущую информацию о пользователе - текущие права, карточка пользователя + +Технологический стек: +--------------------- + + +* Python 3 +* Django 3 + +Quickstart +---------- + +Перед запуском необходимо создать ``.env`` файл. + +.. code-block:: bash + + cp .env.example .env + +Заменить переменные в ``.env`` на актуальные. + +.. code-block:: bash + + sudo apt install make + pip install --upgrade pip + pip install -r requirements/dev.txt + (set -a && source .env && ./manage.py migrate) + (set -a && source .env && ./manage.py loaddata data.json) + (set -a && source .env && ./manage.py runserver) + +Перед запуском для тестирования: +-------------------------------- + +Убедитесь, что вы зарегистрированы в песочнице ZenDesk, у вас назначена организация ``SYSTEM`` +Для админов ZenDesk дополнительно - создайте токен доступа в ZenDesk +При запуске в Docker убедитесь что папка, которая будет служить хранилищем для БД, открыта на запись и чтение + +Запуск на локальной машине: +--------------------------- + + +* Скопировать репозиторий на локальную машину +* Перейти в папку приложения +* Активировать виртуальное окружение +* Выполнить команду ``pip install -r requirements/dev.txt`` +* В виртуальное окружение добавить следующие переменные: + +.. code-block:: + + 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 .`` +* Выполнить команду + .. code-block:: 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`` (на другом домене нужно будет создать сначала пользователей в песочнице с правами админа и легкого агента +с этими же email, назначить им организацию ``SYSTEM``\ ) + +Параметры тестовой песочницы: +----------------------------- + +Пример полной конфигурации можно найти в `.env.example <.env.example>`_. Почту и токен админа ZenDesk взять у руководителя (если вы не админ). + +Для проверки pylint используем: +------------------------------- + +pylint ../access_controller + +Для приведения файлов к стандарту PEP8 используем: +-------------------------------------------------- + +autopep8 --in-place filename + +Для проверки орфографии: +------------------------ + +cd docs + +(set -a && source ../.env && make spelling) + +Для обновления документации: +---------------------------- + +m2r README.md + +cd docs + +(set -a && source ../.env && make html) + +Read more +--------- + + +* Zenpy: `http://docs.facetoe.com.au `_ +* Zendesk API: `https://developer.zendesk.com/rest_api/docs/ `_