Files
mayan-edms/mayan/apps/permissions/utils.py
2015-04-07 16:04:09 -04:00

65 lines
2.1 KiB
Python

from __future__ import unicode_literals
from django.contrib.auth.models import Group, User
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext_lazy as _
from common.models import AnonymousUserSingleton
from common.utils import get_object_name
from .classes import Member
def _as_choice_list(items):
return sorted([(Member.encapsulate(item).gid, get_object_name(item)) for item in items], key=lambda x: x[1])
def get_role_members(role, separate=False):
user_ct = ContentType.objects.get(model='user')
group_ct = ContentType.objects.get(model='group')
anonymous = ContentType.objects.get(model='anonymoususersingleton')
users = role.members(filter_dict={'member_type': user_ct})
groups = role.members(filter_dict={'member_type': group_ct})
anonymous = role.members(filter_dict={'member_type': anonymous})
if separate:
return users, groups, anonymous
else:
members = []
if users:
members.append((_('Users'), _as_choice_list(list(users))))
if groups:
members.append((_('Groups'), _as_choice_list(list(groups))))
if anonymous:
members.append((_('Special'), _as_choice_list(list(anonymous))))
return members
def get_non_role_members(role):
# non members = all users - members - staff - super users
member_users, member_groups, member_anonymous = get_role_members(role, separate=True)
staff_users = User.objects.filter(is_staff=True)
super_users = User.objects.filter(is_superuser=True)
users = set(User.objects.all()) - set(member_users) - set(staff_users) - set(super_users)
groups = set(Group.objects.all()) - set(member_groups)
anonymous = set([AnonymousUserSingleton.objects.get()]) - set(member_anonymous)
non_members = []
if users:
non_members.append((_('Users'), _as_choice_list(list(users))))
if groups:
non_members.append((_('Groups'), _as_choice_list(list(groups))))
if anonymous:
non_members.append((_('Special'), _as_choice_list(list(anonymous))))
return non_members