import logging from django.apps import apps from django.contrib.auth import get_user_model from django.contrib.auth.models import Group app_config = apps.get_containing_app_config(__package__) logger = logging.getLogger(__name__) def get_system_user(): return get_user_model().objects.get_or_create(username='-system-')[0] def get_ghost_user(): return get_user_model().objects.get_or_create(username='-deleted-')[0] def get_group_members(group_name, ignore_missing=False): users = [] try: group = Group.objects.get(name=group_name) users.extend(group.user_set.all()) except Group.DoesNotExist: if not ignore_missing: raise return users def get_group_names_by_role(role): if role == 'publisher': sub_roles = ('publisher_print', 'publisher_web', 'publisher_facebook') elif role.startswith('publisher_'): sub_roles = (role, ) elif role == 'manager': sub_roles = ('manager_super', 'manager_w', 'manager_s', 'manager_m', 'manager_k', 'manager_b') elif role == 'manager_super': sub_roles = (role, ) elif role.startswith('manager_'): sub_roles = ('manager_super', role) else: sub_roles = (role, ) group_names = [] for sub_role in sub_roles: var_name = 'groups_{}'.format(sub_role) if hasattr(app_config.settings, var_name): group_names += getattr(app_config.settings, var_name) return list(set(group_names)) def get_users_by_role(role): users = [] group_names = get_group_names_by_role(role) for group_name in group_names: users += get_group_members(group_name, ignore_missing=True) return list(set(users)) def has_role(user, role): group_names = get_group_names_by_role(role) if group_names and user.groups.filter(name__in=group_names).count(): return True return False