src/notes/models/auth.py
author salimr <riwad.salim@yahoo.fr>
Tue, 09 Oct 2018 10:52:23 +0200
changeset 162 1fd73fdaf4c6
parent 142 56850f5c73f6
permissions -rw-r--r--
Add ReadOnlySession component and message when session list is empty

"""
auth module that defines irinotes' users and group
"""
from django.contrib.auth.models import AbstractUser, Group
from django.db import models
from django.utils.translation import ugettext_lazy as _


class User(AbstractUser):

    class Meta:
        verbose_name = _('User')
        verbose_name_plural = _('Users')


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')

    # TODO:
    default_group = models.ForeignKey(
        Group,
        null=False,
        verbose_name=_("UserProfile|default_group"),
        on_delete=models.PROTECT)

    class Meta:
        verbose_name = _('UserProfile')
        verbose_name_plural = _('UserProfiles')


class GroupProfile(models.Model):
    group = models.OneToOneField(
        Group, unique=True, on_delete=models.CASCADE, related_name='profile')
    description = models.TextField(null=True, blank=True)
    # TODO: manage when user is deleted: put first user as owner. delete group if empty
    owner = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    # TODO: can not delete group when user is not deleted.
    # TODO: other users cannot set as owner
    # TODO: delete personal group when user is deleted
    # TODO: change group name when user change name
    # indicate that this group is a personal group.
    # used this instead of a boolean because it allows to easily enforce that a user has only one personal group
    owner_personal = models.OneToOneField(User, on_delete=models.CASCADE, null=True, related_name='personal_group')
    protocol = models.CharField(max_length=512, null=True, blank=True)

    @property
    def is_personal(self):
        return self.owner == self.owner_personal

    class Meta:
        verbose_name = _('GroupProfile')
        verbose_name_plural = _('GroupProfiles')