Add rights management backend

This commit is contained in:
Andrey Kovalev 2021-02-17 20:43:57 +03:00
parent 4555627bd3
commit bf69c870cd
3 changed files with 87 additions and 2 deletions

View File

@ -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/<int:id>', 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"),
]

View File

@ -0,0 +1,31 @@
{% extends 'base/base.html' %}
{% load static %}
{% block title %}{{ pagename }}{% endblock %}
{% block heading %}Управление правами{% endblock %}
{% block content %}
<br>
<h3>Инженеры</h3>
{%for engineer in engineers%}
{{ engineer.name }}
{% endfor %}
<h3>Агенты</h3>
{%for agent in agents%}
{{ agent.name }}
{% endfor %}
<br>
{% if role == "engineer" %}
<a href="/work/hand_over">Сдать смену</a>
{% else %}
<a href="/work/become_engineer">Запросить права инженера</a>
{% endif %}
{% endblock %}

View File

@ -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')