diff --git a/circle/dashboard/utils.py b/circle/dashboard/utils.py new file mode 100644 index 0000000..a464e66 --- /dev/null +++ b/circle/dashboard/utils.py @@ -0,0 +1,50 @@ +from django.core.urlresolvers import reverse + +from guardian.shortcuts import (get_users_with_perms, get_groups_with_perms, + get_perms, remove_perm, assign_perm) + + +def split(t, at): + """ + Split collection at first occurance of given element. + + >>> split("FooBar", "B") + ('Foo', 'Bar') + >>> split(range(5), 2) + ([0, 1], [2, 3, 4]) + """ + + pos = t.index(at) + return t[:pos], t[pos:] + + +def first_common_element(a, b): + for i in a: + if i in b: + return i + return None + + +def get_acl_data(obj): + levels = obj._meta.permissions + levelids = [id for (id, name) in levels] + users = get_users_with_perms(obj, with_group_users=False) + users = [{'user': u, + 'perm': first_common_element(levelids, get_perms(u, obj))} + for u in users] + groups = get_groups_with_perms(obj) + groups = [{'group': g, + 'perm': first_common_element(levelids, get_perms(g, obj))} + for g in groups] + return {'users': users, 'groups': groups, 'levels': levels, + 'url': reverse('dashboard.views.vm-acl', args=[obj.pk])} + + +def set_acl_level(obj, whom, level): + levels = obj._meta.permissions + levelids = [id for (id, name) in levels] + to_remove, to_add = split(levelids, level) + for p in to_remove: + remove_perm(p, whom, obj) + for p in to_add: + assign_perm(p, whom, obj) diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py index d092375..eff6e98 100644 --- a/circle/dashboard/views.py +++ b/circle/dashboard/views.py @@ -2,18 +2,16 @@ import re from django.contrib.auth.models import User, Group from django.core import signing -from django.core.urlresolvers import reverse from django.shortcuts import redirect from django.views.generic import TemplateView, DetailView, View from django.views.generic.detail import SingleObjectMixin from django_tables2 import SingleTableView -from guardian.shortcuts import (get_users_with_perms, get_groups_with_perms, - get_perms, remove_perm, assign_perm) from vm.models import Instance from .tables import VmListTable +from .utils import get_acl_data, set_acl_level class IndexView(TemplateView): @@ -32,52 +30,6 @@ class IndexView(TemplateView): return context -def split(t, at): - """ - Split collection at first occurance of given element. - - >>> split("FooBar", "B") - ('Foo', 'Bar') - >>> split(range(5), 2) - ([0, 1], [2, 3, 4]) - """ - - pos = t.index(at) - return t[:pos], t[pos:] - - -def first_common_element(a, b): - for i in a: - if i in b: - return i - return None - - -def get_acl_data(obj): - levels = obj._meta.permissions - levelids = [id for (id, name) in levels] - users = get_users_with_perms(obj, with_group_users=False) - users = [{'user': u, - 'perm': first_common_element(levelids, get_perms(u, obj))} - for u in users] - groups = get_groups_with_perms(obj) - groups = [{'group': g, - 'perm': first_common_element(levelids, get_perms(g, obj))} - for g in groups] - return {'users': users, 'groups': groups, 'levels': levels, - 'url': reverse('dashboard.views.vm-acl', args=[obj.pk])} - - -def set_acl_level(obj, whom, level): - levels = obj._meta.permissions - levelids = [id for (id, name) in levels] - to_remove, to_add = split(levelids, level) - for p in to_remove: - remove_perm(p, whom, obj) - for p in to_add: - assign_perm(p, whom, obj) - - class VmDetailView(DetailView): template_name = "dashboard/vm-detail.html" model = Instance