فهرست منبع

Pulling back in some changes that got accidentally deleted

Pushing without review, since these changes have already been through review
once.
Jon Natkins 14 سال پیش
والد
کامیت
ea0a337bcb
2فایلهای تغییر یافته به همراه34 افزوده شده و 7 حذف شده
  1. 0 2
      apps/useradmin/src/useradmin/tests.py
  2. 34 5
      apps/useradmin/src/useradmin/views.py

+ 0 - 2
apps/useradmin/src/useradmin/tests.py

@@ -169,8 +169,6 @@ def test_group_admin():
   assert_true(len(Group.objects.get(name="testgroup").user_set.all()) == 0)
   assert_true(len(Group.objects.get(name="testgroup").user_set.all()) == 0)
 
 
   # And now, just for kicks, let's try adding a user
   # And now, just for kicks, let's try adding a user
-  response = c.get('/useradmin/groups/edit/testgroup')
-  assert_true("Edit Group: testgroup" in response.content)
   response = c.post('/useradmin/groups/edit/testgroup',
   response = c.post('/useradmin/groups/edit/testgroup',
                     dict(name="testgroup",
                     dict(name="testgroup",
                     members=[User.objects.get(username="test").pk],
                     members=[User.objects.get(username="test").pk],

+ 34 - 5
apps/useradmin/src/useradmin/views.py

@@ -32,7 +32,7 @@ from desktop.lib.django_util import get_username_re_rule, get_groupname_re_rule,
 from django.core import urlresolvers
 from django.core import urlresolvers
 
 
 from useradmin.models import GroupPermission, HuePermission, UserProfile, LdapGroup
 from useradmin.models import GroupPermission, HuePermission, UserProfile, LdapGroup
-from useradmin.models import get_profile
+from useradmin.models import get_profile, get_default_user_group
 import ldap_access
 import ldap_access
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
@@ -81,6 +81,9 @@ def delete_group(request, name):
       __groups_lock.acquire()
       __groups_lock.acquire()
       try:
       try:
         group = Group.objects.get(name=name)
         group = Group.objects.get(name=name)
+        default_group = get_default_user_group()
+        if default_group is not None and default_group.name == name:
+          raise PopupException("The default user group may not be deleted.")
         group.delete()
         group.delete()
       finally:
       finally:
         __groups_lock.release()
         __groups_lock.release()
@@ -109,7 +112,7 @@ class UserChangeForm(django.contrib.auth.forms.UserChangeForm):
   password2 = forms.CharField(label="Password confirmation", widget=forms.PasswordInput, required=False)
   password2 = forms.CharField(label="Password confirmation", widget=forms.PasswordInput, required=False)
 
 
   class Meta(django.contrib.auth.forms.UserChangeForm.Meta):
   class Meta(django.contrib.auth.forms.UserChangeForm.Meta):
-    fields = ["username", "first_name", "last_name", "email", "is_active", "is_superuser", "groups"]
+    fields = ["username", "first_name", "last_name", "email"]
 
 
   def clean_password2(self):
   def clean_password2(self):
     password1 = self.cleaned_data.get("password1", "")
     password1 = self.cleaned_data.get("password1", "")
@@ -133,8 +136,26 @@ class UserChangeForm(django.contrib.auth.forms.UserChangeForm):
       user.set_password(self.cleaned_data["password1"])
       user.set_password(self.cleaned_data["password1"])
     if commit:
     if commit:
       user.save()
       user.save()
+      # groups must be saved after the user
+      self.save_m2m()
     return user
     return user
 
 
+class SuperUserChangeForm(UserChangeForm):
+  class Meta(UserChangeForm.Meta):
+    fields = ["username", "is_active"] + UserChangeForm.Meta.fields + ["is_superuser", "groups"]
+  def __init__(self, *args, **kwargs):
+    super(SuperUserChangeForm, self).__init__(*args, **kwargs)
+    if self.instance.id:
+      # If the user exists already, we'll use its current group memberships
+      self.initial['groups'] = set(self.instance.groups.all())
+    else:
+      # If his is a new user, suggest the default group
+      default_group = get_default_user_group()
+      if default_group is not None:
+        self.initial['groups'] = set([default_group])
+      else:
+        self.initial['groups'] = []
+
 def edit_user(request, username=None):
 def edit_user(request, username=None):
   """
   """
   edit_user(request, username = None) -> reply
   edit_user(request, username = None) -> reply
@@ -151,8 +172,13 @@ def edit_user(request, username=None):
   else:
   else:
     instance = None
     instance = None
 
 
+  if request.user.is_superuser:
+    form_class = SuperUserChangeForm
+  else:
+    form_class = UserChangeForm
+
   if request.method == 'POST':
   if request.method == 'POST':
-    form = UserChangeForm(request.POST, instance=instance)
+    form = form_class(request.POST, instance=instance)
     if form.is_valid(): # All validation rules pass
     if form.is_valid(): # All validation rules pass
       if instance is None:
       if instance is None:
         form.save()
         form.save()
@@ -187,7 +213,7 @@ def edit_user(request, username=None):
       return render('edit_user_confirmation.mako', request,
       return render('edit_user_confirmation.mako', request,
 	    dict(form=form, action=request.path, username=username))
 	    dict(form=form, action=request.path, username=username))
   else:
   else:
-    form = UserChangeForm(instance=instance)
+    form = form_class(instance=instance)
   return render('edit_user.mako', request,
   return render('edit_user.mako', request,
     dict(form=form, action=request.path, username=username))
     dict(form=form, action=request.path, username=username))
 
 
@@ -393,7 +419,9 @@ def _import_ldap_group(groupname, import_members=False, import_by_dn=False):
       except User.DoesNotExist:
       except User.DoesNotExist:
         continue
         continue
 
 
-    if get_profile(user).creation_method == str(UserProfile.CreationMethod.HUE):
+    if user is None:
+      # There was a naming conflict, or for some other reason, we couldn't get
+      # at the user
       continue
       continue
     LOG.debug("Adding user %s to group %s" % (member, group.name))
     LOG.debug("Adding user %s to group %s" % (member, group.name))
     group.user_set.add(user)
     group.user_set.add(user)
@@ -443,6 +471,7 @@ class GroupEditForm(forms.ModelForm):
     super(GroupEditForm, self).__init__(*args, **kwargs)
     super(GroupEditForm, self).__init__(*args, **kwargs)
 
 
     if self.instance.id:
     if self.instance.id:
+      self.fields['name'].widget.attrs['readonly'] = True
       initial_members = User.objects.filter(groups=self.instance).order_by('username')
       initial_members = User.objects.filter(groups=self.instance).order_by('username')
       initial_perms = HuePermission.objects.filter(grouppermission__group=self.instance).order_by('app','description')
       initial_perms = HuePermission.objects.filter(grouppermission__group=self.instance).order_by('app','description')
     else:
     else: