Using Django builtin users for user management

This commit is contained in:
Michael Bergbauer 2025-06-18 08:04:47 +02:00
parent 5ec4eb7964
commit 042ec3760f
4 changed files with 118 additions and 15 deletions

View File

@ -106,6 +106,7 @@ AUTH_PASSWORD_VALIDATORS = [
},
]
AUTH_USER_MODEL = 'member.UserAccount'
# Internationalization
# https://docs.djangoproject.com/en/5.2/topics/i18n/

View File

@ -26,24 +26,24 @@ class Command(BaseCommand):
self.stdout.write("🔐 Erstelle Benutzerkonten...")
UserAccount.objects.create(
person=p0,
userName="admin",
passwort_hash=make_password("adminpass1234"),
username="admin",
password=make_password("adminpass1234"),
role="superadmin",
isActive=True,
is_active=True,
)
UserAccount.objects.create(
person=p1,
userName="maxadmin",
passwort_hash=make_password("adminpass123"),
username="maxadmin",
password=make_password("adminpass123"),
role="admin",
isActive=True,
is_active=True,
)
UserAccount.objects.create(
person=p2,
userName="erikam",
passwort_hash=make_password("mitglied456"),
username="erikam",
password=make_password("mitglied456"),
role="mitglied",
isActive=True,
is_active=True,
)
self.stdout.write(self.style.SUCCESS("✅ Testdaten erfolgreich eingespielt."))

View File

@ -0,0 +1,105 @@
# Generated by Django 5.2.1 on 2025-06-15 15:41
import django.contrib.auth.models
import django.contrib.auth.validators
import django.utils.timezone
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
('member', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='useraccount',
options={'verbose_name': 'user', 'verbose_name_plural': 'users'},
),
migrations.AlterModelManagers(
name='useraccount',
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
migrations.RemoveField(
model_name='useraccount',
name='isActive',
),
migrations.RemoveField(
model_name='useraccount',
name='lastLogin',
),
migrations.RemoveField(
model_name='useraccount',
name='passwort_hash',
),
migrations.RemoveField(
model_name='useraccount',
name='userName',
),
migrations.AddField(
model_name='useraccount',
name='date_joined',
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined'),
),
migrations.AddField(
model_name='useraccount',
name='email',
field=models.EmailField(blank=True, max_length=254, verbose_name='email address'),
),
migrations.AddField(
model_name='useraccount',
name='first_name',
field=models.CharField(blank=True, max_length=150, verbose_name='first name'),
),
migrations.AddField(
model_name='useraccount',
name='groups',
field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups'),
),
migrations.AddField(
model_name='useraccount',
name='is_active',
field=models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active'),
),
migrations.AddField(
model_name='useraccount',
name='is_staff',
field=models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status'),
),
migrations.AddField(
model_name='useraccount',
name='is_superuser',
field=models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status'),
),
migrations.AddField(
model_name='useraccount',
name='last_login',
field=models.DateTimeField(blank=True, null=True, verbose_name='last login'),
),
migrations.AddField(
model_name='useraccount',
name='last_name',
field=models.CharField(blank=True, max_length=150, verbose_name='last name'),
),
migrations.AddField(
model_name='useraccount',
name='password',
field=models.CharField(default='changeme123', max_length=128, verbose_name='password'),
preserve_default=False,
),
migrations.AddField(
model_name='useraccount',
name='user_permissions',
field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions'),
),
migrations.AddField(
model_name='useraccount',
name='username',
field=models.CharField(default='username', error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username'),
preserve_default=False,
),
]

View File

@ -1,20 +1,17 @@
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils import timezone
from .Person import Person
class UserAccount(models.Model):
class UserAccount(AbstractUser):
person = models.ForeignKey(Person, on_delete=models.CASCADE, related_name='benutzerkonten')
userName = models.CharField(max_length=150, unique=True)
passwort_hash = models.CharField(max_length=128)
role = models.CharField(max_length=50, choices=[
('mitglied', 'Mitglied'),
('geraetewart', 'Gerätewart'),
('kommandant', 'Kommandant'),
('admin', 'Administrator'),
])
isActive = models.BooleanField(default=True)
lastLogin = models.DateTimeField(null=True, blank=True)
def __str__(self):
return f"{self.benutzername} ({self.rolle})"