浏览代码

Pulling back in some changes that got accidentally deleted

Pushing without review, since these changes have already been through review
once.
Jon Natkins 13 年之前
父节点
当前提交
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)
 
   # 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: