добавил настройку прав пользователей

This commit is contained in:
VladislavOstapov 2024-01-17 18:15:12 +03:00
parent 222d87d220
commit 981ad1b286
2 changed files with 43 additions and 20 deletions

View File

@ -3,7 +3,7 @@ import os
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
from django.shortcuts import render from django.shortcuts import render
# from django.db.models import Manager # from django.db.models import Manager
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required, permission_required
# только для тестирования! # только для тестирования!
import requests import requests
@ -16,24 +16,20 @@ def view_index(request):
return render(request, 'index.html') return render(request, 'index.html')
@permission_required(perm='view_logs', raise_exception=True)
def view_stats(request): def view_stats(request):
if request.user.is_authenticated: # только для тестирования!
# только для тестирования! res = requests.get(TEST_BASE_FETCH + "?stats", headers={'Authorization': os.getenv("TEST_AUTH")})
res = requests.get(TEST_BASE_FETCH + "?stats", headers={'Authorization': os.getenv("TEST_AUTH")}) response = HttpResponse(res.content)
response = HttpResponse(res.content) response.headers["Content-type"] = response.headers["Content-type"]
response.headers["Content-type"] = response.headers["Content-type"] return response
return response
else:
return HttpResponseForbidden()
@permission_required(perm='view_logs', raise_exception=True)
def view_tank_chart(request): def view_tank_chart(request):
if request.user.is_authenticated: # только для тестирования!
# только для тестирования! days = request.GET.get('days', '7')
days = request.GET.get('days', '7') res = requests.get(TEST_BASE_FETCH + "?tank_chart=" + days, headers={'Authorization': os.getenv("TEST_AUTH")})
res = requests.get(TEST_BASE_FETCH + "?tank_chart=" + days, headers={'Authorization': os.getenv("TEST_AUTH")}) response = HttpResponse(res.content)
response = HttpResponse(res.content) response.headers["Content-type"] = response.headers["Content-type"]
response.headers["Content-type"] = response.headers["Content-type"] return response
return response
else:
return HttpResponseForbidden()

View File

@ -2,7 +2,7 @@ from django.contrib.auth.models import AbstractBaseUser
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from django.core.validators import MinLengthValidator from django.core.validators import MinLengthValidator
import ospaz_site.settings as settings
from .managers import CustomUserManager from .managers import CustomUserManager
@ -35,7 +35,34 @@ class User(AbstractBaseUser):
default_permissions = () default_permissions = ()
def has_perm(self, perm, obj=None): def has_perm(self, perm, obj=None):
return self.is_superuser # управления правами пользователя
secure_level = -1
if self.is_authenticated:
secure_level = 0
if self.is_superuser:
secure_level = 1
permissions = {
'view_logs': 0,
'change_users': 1,
'users.add_user': 1,
'users.change_user': 1,
'users.delete_user': 1,
'users.view_user': 1
}
if perm in permissions:
if permissions[perm] <= secure_level:
return True
elif settings.DEBUG:
print(f"User.has_perm: unknown permission - '{perm}'")
return False
def has_perms(self, perm_list, obj=None):
for p in perm_list:
if not self.has_perm(p, obj):
return False
return True
def has_module_perms(self, package_name): def has_module_perms(self, package_name):
return self.is_superuser return self.is_superuser