This repository has been archived on 2024-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
authentik/passbook/policies/group_membership/models.py

40 lines
1.2 KiB
Python
Raw Normal View History

2020-07-01 19:18:05 +00:00
"""user field matcher models"""
from typing import Type
2020-07-01 19:18:05 +00:00
from django.db import models
from django.forms import ModelForm
2020-07-01 19:18:05 +00:00
from django.utils.translation import gettext as _
from rest_framework.serializers import BaseSerializer
2020-07-01 19:18:05 +00:00
from passbook.core.models import Group
from passbook.policies.models import Policy
from passbook.policies.types import PolicyRequest, PolicyResult
class GroupMembershipPolicy(Policy):
"""Check that the user is member of the selected group."""
group = models.ForeignKey(Group, null=True, blank=True, on_delete=models.SET_NULL)
@property
def serializer(self) -> BaseSerializer:
from passbook.policies.group_membership.api import (
GroupMembershipPolicySerializer,
)
return GroupMembershipPolicySerializer
@property
def form(self) -> Type[ModelForm]:
from passbook.policies.group_membership.forms import GroupMembershipPolicyForm
return GroupMembershipPolicyForm
2020-07-01 19:18:05 +00:00
def passes(self, request: PolicyRequest) -> PolicyResult:
return PolicyResult(self.group.users.filter(pk=request.user.pk).exists())
2020-07-01 19:18:05 +00:00
class Meta:
verbose_name = _("Group Membership Policy")
verbose_name_plural = _("Group Membership Policies")