Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
The users can have a specific role
  • Loading branch information
SilviaAmAm committed May 1, 2024
1 parent 5706ed3 commit 3a03026
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 1 deletion.
18 changes: 17 additions & 1 deletion backend/src/openarchiefbeheer/accounts/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@
from django.contrib.auth.admin import UserAdmin as _UserAdmin
from django.core.exceptions import PermissionDenied, ValidationError
from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _

from .forms import PreventPrivilegeEscalationMixin, UserChangeForm
from .models import User
from .models import Role, User
from .utils import validate_max_user_permissions


@admin.register(User)
class UserAdmin(_UserAdmin):
hijack_success_url = reverse_lazy("root")
form = UserChangeForm
list_display = _UserAdmin.list_display + ("role",)

def get_form(self, request, obj=None, **kwargs):
ModelForm = super().get_form(request, obj, **kwargs)
Expand All @@ -32,3 +34,17 @@ def user_change_password(self, request, id, form_url=""):
raise PermissionDenied from exc

return super().user_change_password(request, id, form_url)

def get_fieldsets(self, request, obj=None):
fieldsets = super().get_fieldsets(request, obj)
return tuple(fieldsets) + ((_("Role"), {"fields": ("role",)}),)


@admin.register(Role)
class RoleAdmin(admin.ModelAdmin):
list_display = (
"name",
"can_start_destruction",
"can_review_destruction",
"can_view_case_details",
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Generated by Django 4.2.11 on 2024-04-30 12:51

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
("accounts", "0001_initial"),
]

operations = [
migrations.CreateModel(
name="Role",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"name",
models.CharField(
help_text="Name of the role",
max_length=255,
unique=True,
verbose_name="name",
),
),
(
"can_start_destruction",
models.BooleanField(
default=False,
help_text="Indicates whether a user can create a list of cases to be deleted.",
verbose_name="can start destruction",
),
),
(
"can_review_destruction",
models.BooleanField(
default=False,
help_text="Indicates whether a user can review a list of cases to be deleted. They can approve it, reject it or provide feedback.",
verbose_name="can review destruction",
),
),
(
"can_view_case_details",
models.BooleanField(
default=False,
help_text="Indicates whether a user can view the contents of cases in a lists.",
verbose_name="can view case details",
),
),
],
options={
"verbose_name": "role",
"verbose_name_plural": "roles",
},
),
migrations.AddField(
model_name="user",
name="role",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="accounts.role",
verbose_name="role",
),
),
]
42 changes: 42 additions & 0 deletions backend/src/openarchiefbeheer/accounts/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@ class User(AbstractBaseUser, PermissionsMixin):
),
)
date_joined = models.DateTimeField(_("date joined"), default=timezone.now)
role = models.ForeignKey(
"accounts.Role",
on_delete=models.SET_NULL,
blank=True,
null=True,
verbose_name=_("role"),
)

objects = UserManager()

Expand All @@ -63,3 +70,38 @@ def get_full_name(self):
def get_short_name(self):
"Returns the short name for the user."
return self.first_name


class Role(models.Model):
name = models.CharField(
_("name"), max_length=255, unique=True, help_text=_("Name of the role")
)
can_start_destruction = models.BooleanField(
_("can start destruction"),
default=False,
help_text=_(
"Indicates whether a user can create a list of cases to be deleted."
),
)
can_review_destruction = models.BooleanField(
_("can review destruction"),
default=False,
help_text=_(
"Indicates whether a user can review a list of cases to be deleted. "
"They can approve it, reject it or provide feedback."
),
)
can_view_case_details = models.BooleanField(
_("can view case details"),
default=False,
help_text=_(
"Indicates whether a user can view the contents of cases in a lists."
),
)

class Meta:
verbose_name = _("role")
verbose_name_plural = _("roles")

def __str__(self):
return self.name

0 comments on commit 3a03026

Please sign in to comment.