Purge groups not available to member on state change

This commit is contained in:
Aaron Kable 2020-01-07 02:41:18 +00:00
parent cfb2c55a4b
commit 8c33349dcb
2 changed files with 18 additions and 2 deletions

View File

@ -4,7 +4,7 @@ from django.db.models.signals import pre_save, post_save, pre_delete, post_delet
from django.dispatch import receiver
from .models import AuthGroup
from .models import GroupRequest
from . import signals
class AuthGroupInlineAdmin(admin.StackedInline):
model = AuthGroup
@ -65,4 +65,4 @@ def redirect_post_delete(sender, signal=None, *args, **kwargs):
@receiver(m2m_changed, sender=Group.permissions.through)
def redirect_m2m_changed_permissions(sender, signal=None, *args, **kwargs):
m2m_changed.send(BaseGroup, *args, **kwargs)
m2m_changed.send(BaseGroup, *args, **kwargs)

View File

@ -0,0 +1,16 @@
from allianceauth.authentication.signals import state_changed
from .managers import GroupManager
from .models import Group
from django.dispatch import receiver
import logging
logger = logging.getLogger(__name__)
@receiver(state_changed)
def check_groups_on_state_change(sender, user, state, **kwargs):
logger.debug("Updating auth groups for {}".format(user))
visible_groups = GroupManager.get_joinable_groups(state)
visible_groups = visible_groups | Group.objects.select_related('authgroup').filter(authgroup__internal=True)
groups = user.groups.all()
for g in groups:
if g not in visible_groups:
user.groups.remove(g)