diff --git a/apps/acls/forms.py b/apps/acls/forms.py index 49a995c4e0..0ac08e923a 100644 --- a/apps/acls/forms.py +++ b/apps/acls/forms.py @@ -28,3 +28,52 @@ class HolderSelectionForm(forms.Form): #if holder_list: self.fields['holder_gid'].choices = [(AccessHolder.encapsulate(holder).gid, get_object_name(holder)) for holder in holder_list] + +''' +def get_role_members(role): + user_ct = ContentType.objects.get(model='user') + group_ct = ContentType.objects.get(model='group') + return [member.member_object for member in role.rolemember_set.filter(member_type__in=[user_ct, group_ct])] + + +def get_non_role_members(role): + #non members = all users - members - staff - super users + staff_users = User.objects.filter(is_staff=True) + super_users = User.objects.filter(is_superuser=True) + users = set(User.objects.exclude(pk__in=[member.pk for member in get_role_members(role)])) - set(staff_users) - set(super_users) + groups = set(Group.objects.exclude(pk__in=[member.pk for member in get_role_members(role)])) + return list(users | groups) + + +def add_role_member(role, selection): + model, pk = selection.split(u',') + ct = ContentType.objects.get(model=model) + new_member, created = RoleMember.objects.get_or_create(role=role, member_type=ct, member_id=pk) + if not created: + raise Exception + + +def remove_role_member(role, selection): + model, pk = selection.split(u',') + ct = ContentType.objects.get(model=model) + member = RoleMember.objects.get(role=role, member_type=ct, member_id=pk) + member.delete() + +def role_members(request, role_id): + check_permissions(request.user, [PERMISSION_ROLE_EDIT]) + role = get_object_or_404(Role, pk=role_id) + + return assign_remove( + request, + left_list=lambda: generate_choices_w_labels(get_non_role_members(role)), + right_list=lambda: generate_choices_w_labels(get_role_members(role)), + add_method=lambda x: add_role_member(role, x), + remove_method=lambda x: remove_role_member(role, x), + left_list_title=_(u'non members of role: %s') % role, + right_list_title=_(u'members of role: %s') % role, + extra_context={ + 'object': role, + 'object_name': _(u'role'), + } + ) +'''