Kaynağa Gözat

Pulling back in some changes that got accidentally deleted

Pushing without review, since these changes have already been through review
once.
Jon Natkins 13 yıl önce
ebeveyn
işleme
ea0a337bcb

+ 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)
 
   # 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',
                     dict(name="testgroup",
                     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 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
 
 LOG = logging.getLogger(__name__)
@@ -81,6 +81,9 @@ def delete_group(request, name):
       __groups_lock.acquire()
       try:
         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()
       finally:
         __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)
 
   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):
     password1 = self.cleaned_data.get("password1", "")
@@ -133,8 +136,26 @@ class UserChangeForm(django.contrib.auth.forms.UserChangeForm):
       user.set_password(self.cleaned_data["password1"])
     if commit:
       user.save()
+      # groups must be saved after the user
+      self.save_m2m()
     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):
   """
   edit_user(request, username = None) -> reply
@@ -151,8 +172,13 @@ def edit_user(request, username=None):
   else:
     instance = None
 
+  if request.user.is_superuser:
+    form_class = SuperUserChangeForm
+  else:
+    form_class = UserChangeForm
+
   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 instance is None:
         form.save()
@@ -187,7 +213,7 @@ def edit_user(request, username=None):
       return render('edit_user_confirmation.mako', request,
 	    dict(form=form, action=request.path, username=username))
   else:
-    form = UserChangeForm(instance=instance)
+    form = form_class(instance=instance)
   return render('edit_user.mako', request,
     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:
         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
     LOG.debug("Adding user %s to group %s" % (member, group.name))
     group.user_set.add(user)
@@ -443,6 +471,7 @@ class GroupEditForm(forms.ModelForm):
     super(GroupEditForm, self).__init__(*args, **kwargs)
 
     if self.instance.id:
+      self.fields['name'].widget.attrs['readonly'] = True
       initial_members = User.objects.filter(groups=self.instance).order_by('username')
       initial_perms = HuePermission.objects.filter(grouppermission__group=self.instance).order_by('app','description')
     else: