src/notes/models/auth.py
author ymh <ymh.work@gmail.com>
Thu, 29 Jul 2021 16:46:20 +0200
changeset 207 c39d91bd16af
parent 142 56850f5c73f6
permissions -rw-r--r--
update dependencies and create new version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
"""
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
auth module that defines irinotes' users and group
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
"""
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
from django.contrib.auth.models import AbstractUser, Group
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
from django.db import models
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
from django.utils.translation import ugettext_lazy as _
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
class User(AbstractUser):
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    10
24
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
    class Meta:
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
        verbose_name = _('User')
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
        verbose_name_plural = _('Users')
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents: 24
diff changeset
    15
24
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
class UserProfile(models.Model):
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    17
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    18
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    19
    # TODO:
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    20
    default_group = models.ForeignKey(
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    21
        Group,
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    22
        null=False,
142
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    23
        verbose_name=_("UserProfile|default_group"),
56850f5c73f6 - upgrade libraries
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    24
        on_delete=models.PROTECT)
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents: 24
diff changeset
    25
24
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    class Meta:
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        verbose_name = _('UserProfile')
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        verbose_name_plural = _('UserProfiles')
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
class GroupProfile(models.Model):
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents: 24
diff changeset
    32
    group = models.OneToOneField(
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents: 24
diff changeset
    33
        Group, unique=True, on_delete=models.CASCADE, related_name='profile')
24
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    description = models.TextField(null=True, blank=True)
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents: 24
diff changeset
    35
    # TODO: manage when user is deleted: put first user as owner. delete group if empty
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents: 24
diff changeset
    36
    owner = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    37
    # TODO: can not delete group when user is not deleted.
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    38
    # TODO: other users cannot set as owner
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    39
    # TODO: delete personal group when user is deleted
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    40
    # TODO: change group name when user change name
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    41
    # indicate that this group is a personal group.
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    42
    # used this instead of a boolean because it allows to easily enforce that a user has only one personal group
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    43
    owner_personal = models.OneToOneField(User, on_delete=models.CASCADE, null=True, related_name='personal_group')
133
6f3078f7fd47 Work on correct protocol propagation
ymh <ymh.work@gmail.com>
parents: 131
diff changeset
    44
    protocol = models.CharField(max_length=512, null=True, blank=True)
131
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    45
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    46
    @property
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    47
    def is_personal(self):
adad5563603c add personal group, default_group to users and add group info to session on backend
ymh <ymh.work@gmail.com>
parents: 117
diff changeset
    48
        return self.owner == self.owner_personal
117
9864fe2067cd Add api endpoints for group management
ymh <ymh.work@gmail.com>
parents: 24
diff changeset
    49
24
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    class Meta:
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        verbose_name = _('GroupProfile')
3b3999550508 first data model for backend
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
        verbose_name_plural = _('GroupProfiles')