Added group creation, editing, delete support to the user management app; fixed namespace permission checking

This commit is contained in:
Roberto Rosario
2011-05-08 03:38:51 -04:00
parent 3e0a87314e
commit 5a156bf23d
5 changed files with 163 additions and 16 deletions

View File

@@ -2,7 +2,7 @@ from django.utils.translation import ugettext_lazy as _
from navigation.api import register_menu
from permissions import role_list
from user_management import user_list
from user_management import user_list, group_list
from main.conf.settings import SIDE_BAR_SEARCH
@@ -33,7 +33,7 @@ main_menu = [
], 'famfam': 'wrench', 'name': 'tools', 'position': 7},
{'text': _(u'setup'), 'view': 'setting_list', 'links': [
check_settings, role_list, user_list, admin_site
check_settings, role_list, user_list, group_list, admin_site
], 'famfam': 'cog', 'name': 'setup', 'position': 8},
{'text': _(u'about'), 'view': 'about', 'position': 9},

View File

@@ -1,5 +1,5 @@
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
from django.contrib.auth.models import User, Group
from navigation.api import register_links, register_multi_item_links
from permissions.api import register_permissions
@@ -9,11 +9,22 @@ PERMISSION_USER_EDIT = 'user_edit'
PERMISSION_USER_VIEW = 'user_view'
PERMISSION_USER_DELETE = 'user_delete'
PERMISSION_GROUP_CREATE = 'group_create'
PERMISSION_GROUP_EDIT = 'group_edit'
PERMISSION_GROUP_VIEW = 'group_view'
PERMISSION_GROUP_DELETE = 'group_delete'
register_permissions('user_management', [
# Users
{'name': PERMISSION_USER_CREATE, 'label': _(u'Create new users')},
{'name': PERMISSION_USER_EDIT, 'label': _(u'Edit existing users')},
{'name': PERMISSION_USER_VIEW, 'label': _(u'View existing users')},
{'name': PERMISSION_USER_DELETE, 'label': _(u'Delete existing users')},
# Groups
{'name': PERMISSION_GROUP_CREATE, 'label': _(u'Create new groups')},
{'name': PERMISSION_GROUP_EDIT, 'label': _(u'Edit existing groups')},
{'name': PERMISSION_GROUP_VIEW, 'label': _(u'View existing groups')},
{'name': PERMISSION_GROUP_DELETE, 'label': _(u'Delete existing groups')},
])
user_list = {'text': _(u'user list'), 'view': 'user_list', 'famfam': 'user', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_USER_VIEW]}}
@@ -24,6 +35,16 @@ user_multiple_delete = {u'text': _('delete'), 'view': 'user_multiple_delete', 'f
user_set_password = {u'text': _('reset password'), 'view': 'user_set_password', 'args': 'object.id', 'famfam': 'lock_edit', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_USER_EDIT]}}
user_multiple_set_password = {u'text': _('reset password'), 'view': 'user_multiple_set_password', 'famfam': 'lock_edit', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_USER_EDIT]}}
group_list = {'text': _(u'group list'), 'view': 'group_list', 'famfam': 'group', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_GROUP_VIEW]}}
group_edit = {'text': _(u'edit'), 'view': 'group_edit', 'args': 'object.id', 'famfam': 'group_edit', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_GROUP_EDIT]}}
group_add = {'text': _(u'create new group'), 'view': 'group_add', 'famfam': 'group_add', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_GROUP_CREATE]}}
group_delete = {u'text': _('delete'), 'view': 'group_delete', 'args': 'object.id', 'famfam': 'group_delete', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_GROUP_DELETE]}}
group_multiple_delete = {u'text': _('delete'), 'view': 'group_multiple_delete', 'famfam': 'group_delete', 'permissions': {'namespace': 'user_management', 'permissions': [PERMISSION_GROUP_DELETE]}}
register_links(User, [user_edit, user_set_password, user_delete])
register_links(['user_multiple_set_password', 'user_set_password', 'user_multiple_delete', 'user_delete', 'user_edit', 'user_list','user_add'], [user_add, user_list], menu_name=u'sidebar')
register_multi_item_links(['user_list'], [user_multiple_set_password, user_multiple_delete])
register_links(Group, [group_edit, group_delete])
register_links(['group_multiple_delete', 'group_delete', 'group_edit', 'group_list','group_add'], [group_add, group_list], menu_name=u'sidebar')
register_multi_item_links(['group_list'], [group_multiple_delete])

View File

@@ -1,5 +1,5 @@
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.models import User, Group
from django.utils.translation import ugettext_lazy as _
@@ -12,3 +12,9 @@ class UserForm(forms.ModelForm):
class PasswordForm(forms.Form):
new_password_1 = forms.CharField(label=_(u'New password'), widget=forms.PasswordInput())
new_password_2 = forms.CharField(label=_(u'Confirm password'), widget=forms.PasswordInput())
class GroupForm(forms.ModelForm):
class Meta:
model = Group
fields = ('name',)

View File

@@ -1,11 +1,17 @@
from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('user_management.views',
url(r'^list/$', 'user_list', (), 'user_list'),
url(r'^add/$', 'user_add', (), 'user_add'),
url(r'^(?P<user_id>\d+)/edit/$', 'user_edit', (), 'user_edit'),
url(r'^(?P<user_id>\d+)/delete/$', 'user_delete', (), 'user_delete'),
url(r'^multiple/delete/$', 'user_multiple_delete', (), 'user_multiple_delete'),
url(r'^(?P<user_id>\d+)/set_password/$', 'user_set_password', (), 'user_set_password'),
url(r'^multiple/set_password/$', 'user_multiple_set_password', (), 'user_multiple_set_password'),
url(r'^user/list/$', 'user_list', (), 'user_list'),
url(r'^user/add/$', 'user_add', (), 'user_add'),
url(r'^user/(?P<user_id>\d+)/edit/$', 'user_edit', (), 'user_edit'),
url(r'^user/(?P<user_id>\d+)/delete/$', 'user_delete', (), 'user_delete'),
url(r'^user/multiple/delete/$', 'user_multiple_delete', (), 'user_multiple_delete'),
url(r'^user/(?P<user_id>\d+)/set_password/$', 'user_set_password', (), 'user_set_password'),
url(r'^user/multiple/set_password/$', 'user_multiple_set_password', (), 'user_multiple_set_password'),
url(r'^group/list/$', 'group_list', (), 'group_list'),
url(r'^group/add/$', 'group_add', (), 'group_add'),
url(r'^group/(?P<group_id>\d+)/edit/$', 'group_edit', (), 'group_edit'),
url(r'^group/(?P<group_id>\d+)/delete/$', 'group_delete', (), 'group_delete'),
url(r'^group/multiple/delete/$', 'group_multiple_delete', (), 'group_multiple_delete'),
)

View File

@@ -5,14 +5,16 @@ from django.template import RequestContext
from django.contrib import messages
from django.views.generic.list_detail import object_list
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.contrib.auth.models import User, Group
from permissions.api import check_permissions
from user_management import PERMISSION_USER_VIEW, \
PERMISSION_USER_EDIT, PERMISSION_USER_CREATE, \
PERMISSION_USER_DELETE
from user_management.forms import UserForm, PasswordForm
PERMISSION_USER_DELETE, PERMISSION_GROUP_CREATE, \
PERMISSION_GROUP_EDIT, PERMISSION_GROUP_VIEW, \
PERMISSION_GROUP_DELETE
from user_management.forms import UserForm, PasswordForm, GroupForm
def user_list(request):
@@ -89,7 +91,7 @@ def user_add(request):
def user_delete(request, user_id=None, user_id_list=None):
check_permissions(request.user, 'users', [PERMISSION_USER_DELETE])
check_permissions(request.user, 'user_management', [PERMISSION_USER_DELETE])
post_action_redirect = None
if user_id:
@@ -142,7 +144,7 @@ def user_multiple_delete(request):
def user_set_password(request, user_id=None, user_id_list=None):
check_permissions(request.user, 'users', [PERMISSION_USER_EDIT])
check_permissions(request.user, 'user_management', [PERMISSION_USER_EDIT])
post_action_redirect = None
if user_id:
@@ -201,3 +203,115 @@ def user_multiple_set_password(request):
return user_set_password(
request, user_id_list=request.GET.get('id_list', [])
)
def group_list(request):
check_permissions(request.user, 'user_management', [PERMISSION_GROUP_VIEW])
return object_list(
request,
queryset=Group.objects.all(),
template_name='generic_list.html',
extra_context={
'title': _(u'groups'),
'hide_link': True,
'extra_columns': [
{
'name': _(u'members'),
'attribute': 'user_set.count'
},
],
'multi_select_as_buttons': True,
},
)
def group_edit(request, group_id):
check_permissions(request.user, 'user_management', [PERMISSION_GROUP_EDIT])
group = get_object_or_404(Group, pk=group_id)
if request.method == 'POST':
form = GroupForm(instance=group, data=request.POST)
if form.is_valid():
form.save()
messages.success(request, _(u'Group "%s" updated successfully.') % group)
return HttpResponseRedirect(reverse('group_list'))
else:
form = GroupForm(instance=group)
return render_to_response('generic_form.html', {
'title': _(u'edit group: %s') % group,
'form': form,
'object': group,
},
context_instance=RequestContext(request))
def group_add(request):
check_permissions(request.user, 'user_management', [PERMISSION_GROUP_CREATE])
if request.method == 'POST':
form = GroupForm(request.POST)
if form.is_valid():
group = form.save()
messages.success(request, _(u'Group "%s" created successfully.') % group)
return HttpResponseRedirect(reverse('group_list'))
else:
form = GroupForm()
return render_to_response('generic_form.html', {
'title': _(u'create new group'),
'form': form,
},
context_instance=RequestContext(request))
def group_delete(request, group_id=None, group_id_list=None):
check_permissions(request.user, 'user_management', [PERMISSION_GROUP_DELETE])
post_action_redirect = None
if group_id:
groups = [get_object_or_404(Group, pk=group_id)]
post_action_redirect = reverse('group_list')
elif group_id_list:
groups = [get_object_or_404(Group, pk=group_id) for group_id in group_id_list.split(',')]
else:
messages.error(request, _(u'Must provide at least one group.'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/')))
next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/')))
if request.method == 'POST':
for group in groups:
try:
group.delete()
messages.success(request, _(u'Group "%s" deleted successfully.') % group)
except Exception, e:
messages.error(request, _(u'Error deleting group "%(group)s": %(error)s') % {
'group': group, 'error': e
})
return HttpResponseRedirect(next)
context = {
'object_name': _(u'group'),
'delete_view': True,
'previous': previous,
'next': next,
}
if len(groups) == 1:
context['object'] = groups[0]
context['title'] = _(u'Are you sure you wish to delete the group: %s?') % ', '.join([unicode(d) for d in groups])
elif len(groups) > 1:
context['title'] = _(u'Are you sure you wish to delete the groups: %s?') % ', '.join([unicode(d) for d in groups])
return render_to_response('generic_confirm.html', context,
context_instance=RequestContext(request))
def group_multiple_delete(request):
return group_delete(
request, group_id_list=request.GET.get('id_list', [])
)