mirror of
https://github.com/PostHog/posthog.git
synced 2024-11-25 11:17:50 +01:00
34d0da70d9
Also remove type annotations for Django fields, due to updates to the stubs and possibly to mypy they are actively unhelpful now.
48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
from django.db import models
|
|
|
|
from posthog.models.utils import UUIDModel, sane_repr
|
|
from posthog.models.organization import OrganizationMembership
|
|
|
|
|
|
# We call models that grant a user access to some grouping of users a "membership"
|
|
class ExplicitTeamMembership(UUIDModel):
|
|
class Level(models.IntegerChoices):
|
|
"""Keep in sync with OrganizationMembership.Level (only difference being organizations having an Owner)."""
|
|
|
|
MEMBER = 1, "member"
|
|
ADMIN = 8, "administrator"
|
|
|
|
team = models.ForeignKey(
|
|
"posthog.Team",
|
|
on_delete=models.CASCADE,
|
|
related_name="explicit_memberships",
|
|
related_query_name="explicit_membership",
|
|
)
|
|
parent_membership = models.ForeignKey(
|
|
"posthog.OrganizationMembership",
|
|
on_delete=models.CASCADE,
|
|
related_name="explicit_team_memberships",
|
|
related_query_name="explicit_team_membership",
|
|
)
|
|
level = models.PositiveSmallIntegerField(default=Level.MEMBER, choices=Level.choices)
|
|
joined_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
class Meta:
|
|
constraints = [
|
|
models.UniqueConstraint(
|
|
fields=["team", "parent_membership"],
|
|
name="unique_explicit_team_membership",
|
|
)
|
|
]
|
|
|
|
def __str__(self):
|
|
return str(self.Level(self.level))
|
|
|
|
@property
|
|
def effective_level(self) -> "OrganizationMembership.Level":
|
|
"""If organization level is higher than project level, then that takes precedence over explicit project level."""
|
|
return max(self.level, self.parent_membership.level)
|
|
|
|
__repr__ = sane_repr("team", "parent_membership", "level")
|