Skip to content
Snippets Groups Projects
Commit bbab011e authored by Valentin Rigal's avatar Valentin Rigal Committed by Bastien Abadie
Browse files

Add a custom group model with the membership relation

parent 8a911d9e
No related branches found
No related tags found
No related merge requests found
......@@ -83,13 +83,8 @@ Note that this local server will only work inside Docker.
### User groups
One group has a special meaning in Arkindex: The `Internal` group, for special users whose tokens are used by workers. This groups is configured using the `INTERNAL_GROUP_ID` setting. The development server will show warnings but let you start the server anyway if the group isn't there; you will be able to access the Django admin and create the group from there. To create them using the shell:
```
backend/arkindex$ ./manage.py shell
>>> from django.contrib.auth.models import Group
>>> Group.objects.create(id=2, name='Internal')
```
We use a custom group model in `arkindex.users.models` (not the `django.contrib.auth` one).
In this early version groups do not define any right yet.
## Usage
......
This diff is collapsed.
......@@ -2,10 +2,10 @@ from django import forms
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.forms import ReadOnlyPasswordHashField
from django.contrib.auth.models import Group
from django.contrib.auth.models import Group as BaseGroup
from enumfields.admin import EnumFieldListFilter
from arkindex.users.models import CorpusRight, User, UserScope
from arkindex.users.models import CorpusRight, Group, User, UserScope
class UserCreationForm(forms.ModelForm):
......@@ -90,8 +90,18 @@ class UserScopeAdmin(admin.ModelAdmin):
list_filter = [('scope', EnumFieldListFilter), ]
# Now register the new UserAdmin...
class MembershipInline(admin.TabularInline):
model = Group.users.through
class GroupAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'public')
inlines = (MembershipInline, )
admin.site.register(User, UserAdmin)
# and hide the unused Group admin
admin.site.unregister(Group)
# Register the custom GroupAdmin
admin.site.register(Group, GroupAdmin)
# and hide base GroupAdmin form contrib.auth
admin.site.unregister(BaseGroup)
admin.site.register(UserScope, UserScopeAdmin)
# Generated by Django 3.1.3 on 2020-11-16 14:40
import uuid
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0005_user_transkribus_email'),
]
operations = [
migrations.CreateModel(
name='Group',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('name', models.CharField(max_length=64)),
('public', models.BooleanField(default=False)),
],
),
migrations.RemoveField(
model_name='user',
name='groups',
),
migrations.CreateModel(
name='Membership',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('level', models.PositiveIntegerField(default=0, help_text='User privilege level.')),
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='memberships', to='users.group')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='memberships', to=settings.AUTH_USER_MODEL)),
],
),
migrations.AddField(
model_name='group',
name='users',
field=models.ManyToManyField(related_name='groups', through='users.Membership', to=settings.AUTH_USER_MODEL),
),
]
import uuid
from django.contrib.auth.models import AbstractBaseUser, Group
from django.contrib.auth.models import AbstractBaseUser
from django.db import models
from enumfields import Enum, EnumField
......@@ -24,12 +24,6 @@ class User(AbstractBaseUser):
is_admin = models.BooleanField(default=False)
verified_email = models.BooleanField(default=False)
groups = models.ManyToManyField(
Group,
blank=True,
related_name="users",
)
corpus = models.ManyToManyField('documents.Corpus', through='users.CorpusRight')
selected_elements = models.ManyToManyField(
......@@ -74,6 +68,24 @@ class User(AbstractBaseUser):
return self.is_admin
class Group(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
name = models.CharField(max_length=64)
public = models.BooleanField(default=False)
users = models.ManyToManyField(
User,
through='Membership',
related_name='groups',
)
class Membership(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='memberships')
group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='memberships')
level = models.PositiveIntegerField(default=0, help_text='User privilege level.')
class OAuthStatus(Enum):
Created = 'created'
Done = 'done'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment