65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
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
|