src/notes/models/auth.py
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 10:53:15 +0100
changeset 183 f8f3af9e5c83
parent 142 56850f5c73f6
permissions -rw-r--r--
Change the settings to avoid using Session authentication for rest framework as it raise exceptions in case client and backend are on the same domain On the filter, adapt to take into account new version of django_filters
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')