From bf69c870cdd88d2da042fe68d49f1cfceababcb2 Mon Sep 17 00:00:00 2001 From: Andrey Kovalev Date: Wed, 17 Feb 2021 20:43:57 +0300 Subject: [PATCH 1/5] Add rights management backend --- access_controller/urls.py | 5 +++- main/templates/pages/work.html | 31 ++++++++++++++++++++ main/views.py | 53 +++++++++++++++++++++++++++++++++- 3 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 main/templates/pages/work.html diff --git a/access_controller/urls.py b/access_controller/urls.py index b2603b2..bf79ff6 100644 --- a/access_controller/urls.py +++ b/access_controller/urls.py @@ -20,7 +20,7 @@ from django.urls import path, include from access_controller import settings from access_controller.settings import DEBUG -from main.views import main_page, profile_page, CustomRegistrationView +from main.views import main_page, profile_page, CustomRegistrationView, work_page, work_hand_over, work_become_engineer urlpatterns = [ path('admin/', admin.site.urls, name='admin'), @@ -30,4 +30,7 @@ urlpatterns = [ path('accounts/login/', LoginView.as_view(extra_context={}), name='login'), # TODO add extra context path('accounts/', include('django.contrib.auth.urls')), path('accounts/', include('django_registration.backends.one_step.urls')), + path('work/', work_page, name="work"), + path('work/hand_over/', work_hand_over, name="work_hand_over"), + path('work/become_engineer/', work_become_engineer, name="work_become_engineer"), ] diff --git a/main/templates/pages/work.html b/main/templates/pages/work.html new file mode 100644 index 0000000..5f49290 --- /dev/null +++ b/main/templates/pages/work.html @@ -0,0 +1,31 @@ +{% extends 'base/base.html' %} + +{% load static %} + + +{% block title %}{{ pagename }}{% endblock %} + + +{% block heading %}Управление правами{% endblock %} + +{% block content %} +
+

Инженеры

+{%for engineer in engineers%} + {{ engineer.name }} +{% endfor %} + +

Агенты

+{%for agent in agents%} + {{ agent.name }} +{% endfor %} + +
+ +{% if role == "engineer" %} + Сдать смену +{% else %} + Запросить права инженера +{% endif %} + +{% endblock %} diff --git a/main/views.py b/main/views.py index d9f8fd9..ee22299 100644 --- a/main/views.py +++ b/main/views.py @@ -1,4 +1,5 @@ -from django.shortcuts import render +from django.shortcuts import render, redirect, reverse +from django.http import HttpResponseRedirect from django.urls import reverse_lazy from main.extra_func import set_and_get_name, set_and_get_email, load_and_get_image, set_and_get_role, check_user_exist, \ @@ -12,6 +13,11 @@ from django_registration.views import RegistrationView from django.contrib.auth.decorators import login_required from zenpy import Zenpy +from zenpy.lib.api_objects import User as ZenpyUser + +from .models import UserProfile + +import os class CustomRegistrationView(RegistrationView): @@ -75,6 +81,51 @@ def profile_page(request): } return render(request, 'pages/profile.html', context) +def auth_user(request): + admin_creds = { + 'email': os.environ.get('Admin_email'), + 'subdomain': 'ngenix1612197338', + 'token': os.environ.get('Oauth_token'), + } + admin = Zenpy(**admin_creds) + zenpy_user: ZenpyUser = admin.users.search(request.user.email).values[0] + return zenpy_user, admin + +@login_required() +def work_page(request, id): + if request.user.is_authenticated and request.user.id == id: + zenpy_user, _ = auth_user(request) + + context = { + 'engineers': UserProfile.objects.filter(role=1), + 'agents': UserProfile.objects.filter(role=0), + 'role': zenpy_user.role, + 'pagename': 'Управление правами' + } + return render(request, 'pages/work.html', context) + return redirect("login") + +@login_required() +def work_hand_over(request): + zenpy_user, admin = auth_user(request) + if request.user.is_authenticated and zenpy_user.role == "end-user": + zenpy_user.role = "agent" + admin.users.update(zenpy_user) + request.user.userprofile.role = 0 + request.user.userprofile.save() + return HttpResponseRedirect(reverse('work', args=(request.user.id, ))) + + +@login_required() +def work_become_engineer(request): + zenpy_user, admin = auth_user(request) + if request.user.is_authenticated and zenpy_user.role == "agent": + zenpy_user.role = "end-user" + admin.users.update(zenpy_user) + request.user.userprofile.role = 1 + request.user.userprofile.save() + return HttpResponseRedirect(reverse('work', args=(request.user.id, ))) + def main_page(request): return render(request, 'pages/index.html') From 8ba662c0caecb5265cf2b891c0365157ecaf24a4 Mon Sep 17 00:00:00 2001 From: Andrey Kovalev Date: Wed, 17 Feb 2021 21:38:41 +0300 Subject: [PATCH 2/5] Fix role end-user -> admin --- main/templates/pages/work.html | 2 +- main/views.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/main/templates/pages/work.html b/main/templates/pages/work.html index 5f49290..4719492 100644 --- a/main/templates/pages/work.html +++ b/main/templates/pages/work.html @@ -22,7 +22,7 @@
-{% if role == "engineer" %} +{% if role == "admin" %} Сдать смену {% else %} Запросить права инженера diff --git a/main/views.py b/main/views.py index ee22299..21e5f97 100644 --- a/main/views.py +++ b/main/views.py @@ -108,7 +108,7 @@ def work_page(request, id): @login_required() def work_hand_over(request): zenpy_user, admin = auth_user(request) - if request.user.is_authenticated and zenpy_user.role == "end-user": + if request.user.is_authenticated and zenpy_user.role == "admin": zenpy_user.role = "agent" admin.users.update(zenpy_user) request.user.userprofile.role = 0 @@ -120,7 +120,7 @@ def work_hand_over(request): def work_become_engineer(request): zenpy_user, admin = auth_user(request) if request.user.is_authenticated and zenpy_user.role == "agent": - zenpy_user.role = "end-user" + zenpy_user.role = "admin" admin.users.update(zenpy_user) request.user.userprofile.role = 1 request.user.userprofile.save() From b1d42ece61614080af92453548788b5a0fc00822 Mon Sep 17 00:00:00 2001 From: Andrey Kovalev Date: Thu, 25 Feb 2021 19:01:09 +0300 Subject: [PATCH 3/5] Fixed name parametrs in env --- main/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/views.py b/main/views.py index 917d5fa..5d362d7 100644 --- a/main/views.py +++ b/main/views.py @@ -98,9 +98,9 @@ def profile_page(request): def auth_user(request): admin_creds = { - 'email': os.environ.get('Admin_email'), + 'email': os.environ.get('ACCESS_CONTROLLER_API_EMAIL'), 'subdomain': 'ngenix1612197338', - 'token': os.environ.get('Oauth_token'), + 'token': os.environ.get('ACCESS_CONTROLLER_API_TOKEN'), } admin = Zenpy(**admin_creds) zenpy_user: ZenpyUser = admin.users.search(request.user.email).values[0] From 33375967493c7f13b5d75ac1ef424b1f7ff39b76 Mon Sep 17 00:00:00 2001 From: Andrew Smirnov Date: Thu, 25 Feb 2021 20:05:04 +0300 Subject: [PATCH 4/5] Remove useless auth check --- main/views.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/main/views.py b/main/views.py index 5d362d7..c1e7794 100644 --- a/main/views.py +++ b/main/views.py @@ -1,4 +1,3 @@ - from django.shortcuts import render, redirect, reverse from django.http import HttpResponseRedirect @@ -17,7 +16,6 @@ from django_registration.views import RegistrationView from django.contrib.auth.decorators import login_required import logging - from zenpy import Zenpy from zenpy.lib.api_objects import User as ZenpyUser @@ -26,7 +24,6 @@ from .models import UserProfile import os - class CustomRegistrationView(RegistrationView): """ Отображение и логика работы страницы регистрации пользователя @@ -96,6 +93,7 @@ def profile_page(request): } return render(request, 'pages/profile.html', context) + def auth_user(request): admin_creds = { 'email': os.environ.get('ACCESS_CONTROLLER_API_EMAIL'), @@ -106,11 +104,12 @@ def auth_user(request): zenpy_user: ZenpyUser = admin.users.search(request.user.email).values[0] return zenpy_user, admin + @login_required() def work_page(request, id): if request.user.is_authenticated and request.user.id == id: zenpy_user, _ = auth_user(request) - + context = { 'engineers': UserProfile.objects.filter(role=1), 'agents': UserProfile.objects.filter(role=0), @@ -120,26 +119,27 @@ def work_page(request, id): return render(request, 'pages/work.html', context) return redirect("login") + @login_required() def work_hand_over(request): zenpy_user, admin = auth_user(request) - if request.user.is_authenticated and zenpy_user.role == "admin": + if zenpy_user.role == "admin": zenpy_user.role = "agent" admin.users.update(zenpy_user) request.user.userprofile.role = 0 request.user.userprofile.save() - return HttpResponseRedirect(reverse('work', args=(request.user.id, ))) + return HttpResponseRedirect(reverse('work', args=(request.user.id,))) @login_required() def work_become_engineer(request): zenpy_user, admin = auth_user(request) - if request.user.is_authenticated and zenpy_user.role == "agent": + if zenpy_user.role == "agent": zenpy_user.role = "admin" admin.users.update(zenpy_user) request.user.userprofile.role = 1 request.user.userprofile.save() - return HttpResponseRedirect(reverse('work', args=(request.user.id, ))) + return HttpResponseRedirect(reverse('work', args=(request.user.id,))) def main_page(request): From f7522c9c69db883e92b042f70cd8d84dffecd2f7 Mon Sep 17 00:00:00 2001 From: Andrey Kovalev Date: Sun, 28 Feb 2021 17:27:07 +0300 Subject: [PATCH 5/5] Fix page html code --- main/templates/pages/profile.html | 2 +- main/templates/pages/work.html | 60 ++++++------------------------- main/views.py | 18 +++++----- 3 files changed, 20 insertions(+), 60 deletions(-) diff --git a/main/templates/pages/profile.html b/main/templates/pages/profile.html index bfd8cd7..6c6ecd2 100644 --- a/main/templates/pages/profile.html +++ b/main/templates/pages/profile.html @@ -45,7 +45,7 @@
- + Запросить права доступа
{% endblock %} diff --git a/main/templates/pages/work.html b/main/templates/pages/work.html index c6f2e01..2fcb4cf 100644 --- a/main/templates/pages/work.html +++ b/main/templates/pages/work.html @@ -2,39 +2,10 @@ {% load static %} - - {% block title %}{{ pagename }}{% endblock %} - {% block heading %}Управление правами{% endblock %} -{% block content %} -
-

Инженеры

-{%for engineer in engineers%} - {{ engineer.name }} -{% endfor %} - -

Агенты

-{%for agent in agents%} - {{ agent.name }} -{% endfor %} - -
- -{% if role == "admin" %} - Сдать смену -{% else %} - Запросить права инженера -{% endif %} - -{% endblock %} - -{% block title %}{{ pagename }}{% endblock %} - -{% block heading %}Управление{% endblock %} - {% block extra_css %} {% endblock %} @@ -52,24 +23,15 @@ - - - + - - - - - - - - - - - - - + {% for engineer in engineers %} + + + + + {% endfor %}
IDemailExpiration DateName(link to profile)Name
1big_boss123@example.ru19:30 18.02.21Иван Иванов
2gachi_cool456@example.ru21:00 18.02.21Пётр Петров
{{ engineer.id }}{{ engineer.name }}
@@ -81,22 +43,22 @@
инженеров:
- 13 + {{ engineers|length }}
легких агентов:
- 22 + {{ agents|length }}
- - + Получить права инженера + Сдать права инженера
diff --git a/main/views.py b/main/views.py index c1e7794..70facff 100644 --- a/main/views.py +++ b/main/views.py @@ -88,6 +88,7 @@ def profile_page(request): 'email': user_profile.user.email, 'name': user_profile.name, 'role': user_profile.role, + 'id': user_profile.id, 'image_url': user_profile.image, 'pagename': 'Страница профиля' } @@ -107,13 +108,10 @@ def auth_user(request): @login_required() def work_page(request, id): - if request.user.is_authenticated and request.user.id == id: - zenpy_user, _ = auth_user(request) - + if request.user.id == id: context = { - 'engineers': UserProfile.objects.filter(role=1), - 'agents': UserProfile.objects.filter(role=0), - 'role': zenpy_user.role, + 'engineers': UserProfile.objects.filter(role="admin"), + 'agents': UserProfile.objects.filter(role="agent"), 'pagename': 'Управление правами' } return render(request, 'pages/work.html', context) @@ -123,10 +121,10 @@ def work_page(request, id): @login_required() def work_hand_over(request): zenpy_user, admin = auth_user(request) - if zenpy_user.role == "admin": + if zenpy_user.role == "admin" or zenpy_user.role == "end-user": zenpy_user.role = "agent" admin.users.update(zenpy_user) - request.user.userprofile.role = 0 + request.user.userprofile.role = "agent" request.user.userprofile.save() return HttpResponseRedirect(reverse('work', args=(request.user.id,))) @@ -134,10 +132,10 @@ def work_hand_over(request): @login_required() def work_become_engineer(request): zenpy_user, admin = auth_user(request) - if zenpy_user.role == "agent": + if zenpy_user.role == "agent" or zenpy_user.role == "end-user": zenpy_user.role = "admin" admin.users.update(zenpy_user) - request.user.userprofile.role = 1 + request.user.userprofile.role = "admin" request.user.userprofile.save() return HttpResponseRedirect(reverse('work', args=(request.user.id,)))