BROKEN! MIGRATE! BIG UPD: not yet complete support for publish[ed|ing]_[web|facebook]
This commit is contained in:
@@ -2,6 +2,7 @@ import logging
|
||||
from django.apps import apps
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import Group
|
||||
from django.db.models import Q
|
||||
|
||||
app_config = apps.get_containing_app_config(__package__)
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -26,21 +27,50 @@ def get_group_members(group_name, ignore_missing=False):
|
||||
return users
|
||||
|
||||
|
||||
def get_group_name_by_role(role):
|
||||
group_name_var = 'group_{}'.format(role)
|
||||
return getattr(app_config.settings, group_name_var, None)
|
||||
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_name = get_group_name_by_role(role)
|
||||
if group_name:
|
||||
users = get_group_members(group_name, ignore_missing=True)
|
||||
return 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_name = get_group_name_by_role(role)
|
||||
if group_name and user.groups.filter(name=group_name).count():
|
||||
group_names = get_group_names_by_role(role)
|
||||
if group_names and user.groups.filter(name__in=group_names).count():
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def get_users_by_permission(permission_name, include_superusers=False):
|
||||
appname, codename = permission_name.split('.')
|
||||
|
||||
query = Q(user_permissions__codename=codename, user_permissions__content_type__app_label=appname)
|
||||
query |= Q(groups__permissions__codename=codename, groups__permissions__content_type__app_label=appname)
|
||||
if include_superusers:
|
||||
query |= Q(is_superuser=True)
|
||||
|
||||
return get_user_model().objects.filter(query).distinct()
|
||||
|
||||
Reference in New Issue
Block a user