Permission values

* adds raw permission values for all groups
pull/2/head
mipel 3 years ago
parent 2757f1b9c1
commit 206d34afbb

@ -7,11 +7,11 @@ Created on: 15.12.20
"""
from getpass import getpass
from django.contrib.auth.models import User
from django.contrib.auth.models import User, Group, Permission
from django.core.management import BaseCommand
from django.db import transaction
from konova.management.commands.setup_test_data import TEST_ORGANISATION_DATA
from konova.management.commands.setup_data import TEST_ORGANISATION_DATA, GROUPS_DATA
from organisation.models import Organisation
CREATED_TEMPLATE = "{} created"
@ -23,39 +23,28 @@ class Command(BaseCommand):
def handle(self, *args, **options):
try:
with transaction.atomic():
self.__init_superuser()
self.__init_test_organisation()
self._init_superuser()
self._init_test_organisation()
self._init_default_groups()
except KeyboardInterrupt:
self.__break_line()
self._break_line()
exit(-1)
def __init_superuser(self):
def _init_superuser(self):
""" Create a superuser by user prompt input
Returns:
"""
self.stdout.write(
self.style.WARNING(
"--- Superuser ---",
)
)
self._write_warning("--- Superuser ---")
username = input("Superuser name: ")
if User.objects.filter(username=username).exists():
self.stdout.write(
self.style.ERROR(
"Name already taken!"
)
)
self._write_error("Name already taken!")
exit(-1)
pw = getpass("Password: ")
pw_confirm = getpass("Confirm password : ")
if pw != pw_confirm:
self.stdout.write(
self.style.ERROR(
"Passwords did not match!"
)
)
self._write_error("Passwords did not match!")
exit(-1)
# Create superuser
@ -65,39 +54,75 @@ class Command(BaseCommand):
superuser.is_staff = True
superuser.set_password(pw)
superuser.save()
self.stdout.write(
self.style.SUCCESS(
"Superuser {} created".format(username)
)
)
self.__break_line()
self._write_success("Superuser {} created".format(username))
self._break_line()
def __init_test_organisation(self):
def _init_test_organisation(self):
""" Creates test organisations from predefined data
Returns:
"""
self.stdout.write(
self.style.WARNING(
"--- Organisations ---"
)
)
self._write_warning("--- Organisations ---")
for org in TEST_ORGANISATION_DATA:
db_org = Organisation.objects.get_or_create(
**org
)[0]
self.stdout.write(
self.style.SUCCESS(
CREATED_TEMPLATE.format(db_org.name)
self._write_success(CREATED_TEMPLATE.format(db_org.name))
self._break_line()
def _init_default_groups(self):
""" Creates the default groups for konova:
* Group default
* Group ZB (registration office employees)
* Group ETS (conservation office employees)
Returns:
"""
self._write_warning("--- Groups ---")
for group_data in GROUPS_DATA:
name = group_data.get("name")
perms_data = group_data.get("permissions")
perms_objects = [
Permission.objects.get_or_create(
codename=perm[0],
name=perm[1]
)
for perm in perms_data
]
group = Group.objects.get_or_create(
name=name,
)
self.__break_line()
group.permissions.set(perms_objects)
def __break_line(self):
self._break_line()
def _break_line(self):
""" Simply prints a line break
Returns:
"""
self.stdout.write("\n")
self.stdout.write("\n")
def _write_warning(self, txt: str):
self.stdout.write(
self.style.WARNING(
txt
)
)
def _write_success(self, txt: str):
self.stdout.write(
self.style.SUCCESS(
txt
)
)
def _write_error(self, txt: str):
self.stdout.write(
self.style.ERROR(
txt
)
)

@ -0,0 +1,61 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 15.12.20
"""
from django.utils.translation import gettext_lazy as _
from konova.settings import ADD_INTERVENTION, CREATE_SHARE_LINK, DELETE_ECOACCOUNT, EDIT_ECOACCOUNT, ADD_ECOACCOUNT, \
DELETE_COMPENSATION, EDIT_COMPENSATION, ADD_COMPENSATION, DELETE_INTERVENTION, EDIT_INTERVENTION, VALIDITY_CHECK, \
DELETE_EMA, EDIT_EMA, ADD_EMA, RECORD_DATA
TEST_ORGANISATION_DATA = [
{
"name": "Test_Official_1",
},
{
"name": "Test_Official_2",
},
{
"name": "Test_NGO_1",
},
{
"name": "Test_Company_1",
},
]
# Groups permissions are declared in konova/settings.py
GROUPS_DATA = [
{
"name": _("Default"),
"permissions": [
ADD_INTERVENTION,
EDIT_INTERVENTION,
DELETE_INTERVENTION,
ADD_COMPENSATION,
EDIT_COMPENSATION,
DELETE_COMPENSATION,
ADD_ECOACCOUNT,
EDIT_ECOACCOUNT,
DELETE_ECOACCOUNT,
CREATE_SHARE_LINK,
]
},
{
"name": _("Registration office"),
"permissions": [
VALIDITY_CHECK,
]
},
{
"name": _("Conservation office"),
"permissions": [
RECORD_DATA,
ADD_EMA,
EDIT_EMA,
DELETE_EMA,
]
},
]

@ -1,49 +0,0 @@
"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 15.12.20
"""
TEST_ORGANISATION_DATA = [
{
"name": "Test_Official_1",
"is_active": True,
"is_deleted": False,
},
{
"name": "Test_Official_2",
"is_active": True,
"is_deleted": False,
},
{
"name": "Test_NGO_1",
"is_active": True,
"is_deleted": False,
},
{
"name": "Test_Company_1",
"is_active": True,
"is_deleted": False,
},
]
TEST_ROLE_GROUPS_DATA = [
{
"name": "Registration office Test_Official_1",
"organisation": "Test_Official_1",
},
{
"name": "Licensing authority Test_Official_1",
"organisation": "Test_Official_1",
},
{
"name": "Dataprovider Test_Official_2",
"organisation": "Test_Official_2",
},
{
"name": "Dataprovider Test_Company_1",
"organisation": "Test_Company_1",
},
]

@ -7,7 +7,7 @@ Created on: 17.11.20
"""
import uuid
from django.contrib.auth.models import User
from django.contrib.auth.models import User, Group
from django.contrib.gis.db.models import MultiPolygonField
from django.db import models
@ -43,6 +43,25 @@ class BaseObject(BaseResource):
abstract = True
class KonovaPermission(models.Model):
"""
Custom permissions for konova
"""
name = models.CharField(max_length=255, blank=False, null=False)
description = models.TextField()
is_active = models.BooleanField(default=True)
class KonovaGroup(models.Model):
"""
Custom group model
"""
name = models.CharField(max_length=255, null=False, blank=False)
permissions = models.ManyToManyField(KonovaPermission)
class Deadline(BaseResource):
"""
Defines a deadline, which can be used to define dates with a semantic meaning

@ -9,6 +9,7 @@ https://docs.djangoproject.com/en/3.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.1/ref/settings/
"""
from django.utils.translation import gettext_lazy as _
# Load other settings
from konova.sub_settings.django_settings import *
@ -51,25 +52,22 @@ DEFAULT_ZOOM = 8.0
# PERMISSION VALUES
## Group default
ADD_INTERVENTION = "add_intervention"
EDIT_INTERVENTION = "edit_intervention"
DELETE_INTERVENTION = "delete_intervention"
ADD_COMPENSATION = "add_compensation"
EDIT_COMPENSATION = "edit_compensation"
DELETE_COMPENSATION = "delete_compensation"
ADD_ECOACCOUNT = "add_ecoaccount"
EDIT_ECOACCOUNT = "edit_ecoaccount"
DELETE_ECOACCOUNT = "delete_ecoaccount"
CREATE_SHARE_LINK = "create_share_link"
ADD_INTERVENTION = ("add_intervention", _("Add new intervention"))
EDIT_INTERVENTION = ("edit_intervention", _("Edit intervention"))
DELETE_INTERVENTION = ("delete_intervention", _("Delete intervention"))
ADD_COMPENSATION = ("add_compensation", _("Add new compensation"))
EDIT_COMPENSATION = ("edit_compensation", _("Edit compensation"))
DELETE_COMPENSATION = ("delete_compensation", _("Delete compensation"))
ADD_ECOACCOUNT = ("add_ecoaccount", _("Add new eco account"))
EDIT_ECOACCOUNT = ("edit_ecoaccount", _("Edit eco account"))
DELETE_ECOACCOUNT = ("delete_ecoaccount", _("Delete eco account"))
CREATE_SHARE_LINK = ("create_share_link", _("Create share link"))
## Group ZB
VALIDITY_CHECK = "validity_check"
VALIDITY_CHECK = ("validity_check", _("Confirm check on data"))
## Group ETS
RECORD_DATA = "record_data" # refers to 'verzeichnen'
ADD_EMA = "add_ema"
EDIT_EMA = "edit_ema"
DELETE_EMA = "delete_ema"
RECORD_DATA = ("record_data", _("Record data")) # refers to 'verzeichnen'
ADD_EMA = ("add_ema", _("Add new EMA"))
EDIT_EMA = ("edit_ema", _("Edit EMA"))
DELETE_EMA = ("delete_ema", _("Delete EMA"))

Loading…
Cancel
Save