Files
@ 64b4d93470bd
Branch filter:
Location: symposion_app/vendor/symposion/teams/models.py - annotation
64b4d93470bd
3.0 KiB
text/x-python
Add django-user-accounts app for use in place of SSO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 69d3df83c15e 69d3df83c15e 69d3df83c15e 67433cacb46f 252697b842c0 69d3df83c15e 252697b842c0 252697b842c0 67433cacb46f 1ab7a304356b 69d3df83c15e 252697b842c0 252697b842c0 69d3df83c15e 69d3df83c15e 3207621058b8 3207621058b8 3207621058b8 69d3df83c15e 69d3df83c15e 69d3df83c15e 69d3df83c15e 69d3df83c15e 3207621058b8 3207621058b8 3207621058b8 3207621058b8 3207621058b8 36ab6d599ffc 0dbcbea1008a 3207621058b8 3207621058b8 3207621058b8 36ab6d599ffc 0dbcbea1008a 36ab6d599ffc 3207621058b8 3207621058b8 36ab6d599ffc 3207621058b8 3207621058b8 36ab6d599ffc 7f0c8496c74a 252697b842c0 36ab6d599ffc a95825ede8d4 69d3df83c15e 69d3df83c15e a907b78bd131 a907b78bd131 a907b78bd131 a907b78bd131 a907b78bd131 36ab6d599ffc 7db401e9a280 7db401e9a280 36ab6d599ffc 7db401e9a280 7db401e9a280 36ab6d599ffc 7db401e9a280 7db401e9a280 36ab6d599ffc 7db401e9a280 7db401e9a280 a907b78bd131 3207621058b8 3207621058b8 3207621058b8 69d3df83c15e 298b162be697 69d3df83c15e 3207621058b8 3207621058b8 3207621058b8 3207621058b8 3207621058b8 3207621058b8 69d3df83c15e 69d3df83c15e 69d3df83c15e 69d3df83c15e 69d3df83c15e 252697b842c0 252697b842c0 252697b842c0 252697b842c0 252697b842c0 252697b842c0 252697b842c0 252697b842c0 252697b842c0 252697b842c0 252697b842c0 252697b842c0 3207621058b8 3207621058b8 3207621058b8 3207621058b8 3207621058b8 3207621058b8 3207621058b8 69d3df83c15e 298b162be697 69d3df83c15e | import datetime
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.urls import reverse
from django.contrib.auth.models import Permission
from django.contrib.auth import get_user_model
from reversion import revisions as reversion
User = get_user_model()
TEAM_ACCESS_CHOICES = [
("open", _("open")),
("application", _("by application")),
("invitation", _("by invitation"))
]
class Team(models.Model):
slug = models.SlugField(unique=True, verbose_name=_("Slug"))
name = models.CharField(max_length=100, verbose_name=_("Name"))
description = models.TextField(blank=True, verbose_name=_("Description"))
access = models.CharField(max_length=20, choices=TEAM_ACCESS_CHOICES,
verbose_name=_("Access"))
# member permissions
permissions = models.ManyToManyField(Permission, blank=True,
related_name="member_teams",
verbose_name=_("Permissions"))
# manager permissions
manager_permissions = models.ManyToManyField(Permission, blank=True,
related_name="manager_teams",
verbose_name=_("Manager permissions"))
created = models.DateTimeField(default=datetime.datetime.now,
editable=False, verbose_name=_("Created"))
def get_absolute_url(self):
return reverse("team_detail", args=[self.slug])
def __str__(self):
return self.name
def get_state_for_user(self, user):
try:
return self.memberships.get(user=user).state
except Membership.DoesNotExist:
return None
def applicants(self):
return self.memberships.filter(state="applied")
def invitees(self):
return self.memberships.filter(state="invited")
def members(self):
return self.memberships.filter(state="member")
def managers(self):
return self.memberships.filter(state="manager")
class Meta:
verbose_name = _('Team')
verbose_name_plural = _('Teams')
MEMBERSHIP_STATE_CHOICES = [
("applied", _("applied")),
("invited", _("invited")),
("declined", _("declined")),
("rejected", _("rejected")),
("member", _("member")),
("manager", _("manager")),
]
class Membership(models.Model):
user = models.ForeignKey(
User,
related_name="memberships",
verbose_name=_("User"),
on_delete=models.CASCADE,
)
team = models.ForeignKey(
Team,
related_name="memberships",
verbose_name=_("Team"),
on_delete=models.CASCADE,
)
state = models.CharField(max_length=20, choices=MEMBERSHIP_STATE_CHOICES,
verbose_name=_("State"))
message = models.TextField(blank=True, verbose_name=_("Message"))
class Meta:
verbose_name = _("Membership")
verbose_name_plural = _("Memberships")
reversion.register(Membership)
|