|
@@ -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:
|