diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py index 3d8d56d35..0352e7e1e 100644 --- a/jumpserver/templatetags/mytags.py +++ b/jumpserver/templatetags/mytags.py @@ -2,7 +2,8 @@ import time from django import template -from juser.models import User, UserGroup +from django.db.models import Q +from juser.models import User register = template.Library() @@ -24,16 +25,16 @@ def int2str(value): def get_role(user_id): user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} user = User.objects.get(id=user_id) - return user_role.get(user.role) + return user_role.get(str(user.role)) @register.filter(name='groups_str') def groups_str(username): groups = [] user = User.objects.get(username=username) - for group in user.user_group.filter(type='M'): + for group in user.user_group.filter(Q(type='A') | Q(type='M')): groups.append(group.name) - return ','.join(groups) + return ' '.join(groups) @register.filter(name='get_item') @@ -52,4 +53,15 @@ def bool2str(value): @register.filter(name='perm_count') def perm_count(user_id): user = User.objects.get(id=int(user_id)) - return user.perm_set.all().count() \ No newline at end of file + return user.perm_set.all().count() + + +@register.filter(name='group_type_to_str') +def group_type_to_str(type_name): + group_types = { + 'P': '私有组', + 'M': '管理组', + 'A': '授权组', + } + + return group_types.get(type_name) diff --git a/juser/models.py b/juser/models.py index 3c4167db5..67fe6de30 100644 --- a/juser/models.py +++ b/juser/models.py @@ -9,7 +9,7 @@ class UserGroup(models.Model): ) name = models.CharField(max_length=80, unique=True) - type = models.CharField(max_length=1, choices=GROUP_TYPE_CHOICES, default='U') + type = models.CharField(max_length=1, choices=GROUP_TYPE_CHOICES, default='P') comment = models.CharField(max_length=160, blank=True, null=True) def __unicode__(self): diff --git a/juser/views.py b/juser/views.py index 879b31421..0f4969af5 100644 --- a/juser/views.py +++ b/juser/views.py @@ -15,6 +15,7 @@ from django.http import HttpResponseRedirect from django.shortcuts import render_to_response from django.core.exceptions import ObjectDoesNotExist +from django.db.models import Q from juser.models import UserGroup, User from connect import PyCrypt, KEY @@ -117,37 +118,57 @@ def group_db_add(**kwargs): group_name = kwargs.get('name') group = UserGroup.objects.filter(name=group_name) if group: - raise AddError + raise AddError('Group %s have been exist .' % group_name) UserGroup.objects.create(**kwargs) -def user_group_add(username, group_name): - user = User.objects.get(username=username) +def add_user_to_group(username, group_name): + try: + user = User.objects.get(username=username) + group = UserGroup.objects.get(name=group_name) + except ObjectDoesNotExist: + raise AddError('User %s or group % does not exit. ' % username, group_name) + else: + groups = [group] + for g in user.user_group.all(): + groups.append(g) + user.user_group = groups + + +def group_add_user(group_name, user_id): group = UserGroup.objects.get(name=group_name) - groups = [group] - for g in user.user_group.all(): - groups.append(g) - user.user_group = groups + user = User.objects.get(id=user_id) + group.user_set.add(user) def group_add(request): error = '' msg = '' header_title, path1, path2 = '添加属组 | Add Group', 'juser', 'group_add' - + group_types = { + 'P': '私有组', + 'M': '管理组', + 'A': '授权组', + } + users = User.objects.all() if request.method == 'POST': - group_name = request.POST.get('group_name', None) - comment = request.POST.get('comment', None) + group_name = request.POST.get('group_name', '') + group_type = request.POST.get('group_type', 'A') + users_selected = request.POST.getlist('users_selected', '') + comment = request.POST.get('comment', '') try: if not group_name: error = u'组名不能为空' raise AddError - group_db_add(name=group_name, comment=comment, type='M') + group_db_add(name=group_name, comment=comment, type=group_type) + for user_id in users_selected: + group_add_user(group_name, user_id) + except AddError: pass except TypeError: - error = u'保存用户失败' + error = u'保存用户组失败' else: msg = u'添加组 %s 成功' % group_name @@ -156,7 +177,7 @@ def group_add(request): def group_list(request): header_title, path1, path2 = '查看属组 | Show Group', 'juser', 'group_list' - groups = contact_list = UserGroup.objects.filter(type='M').order_by('id') + groups = contact_list = UserGroup.objects.filter(Q(type='M') | Q(type='A')).order_by('id') p = paginator = Paginator(contact_list, 10) try: @@ -467,8 +488,8 @@ def user_add(request): date_joined=time_now) server_add_user(username, password, ssh_key_pwd) - group_db_add(name=username, comment=username, type='U') - user_group_add(username=username, group_name=username) + group_db_add(name=username, comment=username, type='P') + add_user_to_group(username=username, group_name=username) if LDAP_ENABLE: ldap_add_user(username, ldap_pwd) msg = u'添加用户 %s 成功!' % username diff --git a/templates/jperm/perm_user_edit.html b/templates/jperm/perm_user_edit.html index 1ce00ec94..00cc85e73 100644 --- a/templates/jperm/perm_user_edit.html +++ b/templates/jperm/perm_user_edit.html @@ -4,19 +4,6 @@ {% block content %} {% endblock %} \ No newline at end of file diff --git a/templates/juser/group_detail.html b/templates/juser/group_detail.html index 9b906ccc0..46c205d07 100644 --- a/templates/juser/group_detail.html +++ b/templates/juser/group_detail.html @@ -20,23 +20,22 @@ - - + + + + {% for user in users %} - - - - - - - - - - + + + + {% endfor %} + + +
属组详情用户名姓名角色
ID{{ group.id }}
组名{{ group.name }}
备注{{ group_comment }}{{ user.username }}{{ user.name }}{{ user.id|get_role }}
diff --git a/templates/juser/group_list.html b/templates/juser/group_list.html index 086dd43d2..89f1f0f83 100644 --- a/templates/juser/group_list.html +++ b/templates/juser/group_list.html @@ -39,6 +39,7 @@ ID 组名 + 类型 备注 操作 @@ -49,9 +50,10 @@ {{ group.id }} {{ group.name }} + {{ group.type|group_type_to_str }} {{ group.comment }} - 详情 + 成员 编辑 删除 diff --git a/templates/juser/user_add.html b/templates/juser/user_add.html index d2c0705c8..9bf685edc 100644 --- a/templates/juser/user_add.html +++ b/templates/juser/user_add.html @@ -54,9 +54,9 @@
- +
- + 登陆 Jumpserver 使用的SSH密钥的密码 @@ -173,7 +173,7 @@ $('#userForm').validator({ ok: "", msg: {required: "必须填写!"} }, - "ssh_key_pwd1": { + "ssh_key_pwd": { rule: "required;length[6~50]", tip: "ssh私钥密码", ok: "", diff --git a/templates/juser/user_list.html b/templates/juser/user_list.html index 18e222aa6..4c10d996e 100644 --- a/templates/juser/user_list.html +++ b/templates/juser/user_list.html @@ -44,7 +44,6 @@ 姓名 属组 角色 - Email 激活 操作 @@ -60,7 +59,6 @@ {{ user.name }} {{ user.username|groups_str }} {{ user.id|get_role }} - {{ user.email }} {{ user.is_active|bool2str }} 详情 diff --git a/templates/juser/user_list1.html b/templates/juser/user_list1.html deleted file mode 100644 index 6c8f2cdad..000000000 --- a/templates/juser/user_list1.html +++ /dev/null @@ -1,130 +0,0 @@ -{% extends 'base.html' %} -{% load mytags %} -{% block content %} -{% include 'nav_cat_bar.html' %} - -
-
-
-
-
-
查看用户 show user info.
- -
- -
- - - - - - - - - - - - - - - - - - {% for user in contacts.object_list %} - - - - - - - - - - - - {% endfor %} - -
ID用户名姓名属组角色Email激活操作
{{ user.id }} {{ user.username }} {{ user.name }} {{ user.username|groups_str }}{{ user.id|get_role }}{{ user.email }}{{ user.is_active|bool2str }} - 详情 - 编辑 - 删除 -
-
-
-
- Showing {{ contacts.start_index }} to {{ contacts.end_index }} of {{ p.count }} entries -
-
-
-
-
    - {% if contacts.has_previous %} - - {% else %} - - {% endif %} - {% for page in p.page_range %} - {% ifequal offset1 page %} -
  • {{ page }}
  • - {% else %} -
  • {{ page }}
  • - {% endifequal %} - {% endfor %} - {% if contacts.has_next %} - - {% else %} - - {% endif %} -
-
-
-
-
-
-
-
-
- - - - - -{% endblock %} \ No newline at end of file diff --git a/templates/script.html b/templates/script.html index 8857cc21d..b42ddd171 100644 --- a/templates/script.html +++ b/templates/script.html @@ -21,7 +21,7 @@ $(document).ready(function(){ $('.i-checks').iCheck({ checkboxClass: 'icheckbox_square-green', - radioClass: 'iradio_square-green', + radioClass: 'iradio_square-green' }); }); @@ -42,9 +42,26 @@ } + function move(from, to) { + $("#"+from+" option").each(function(){ + if ( $(this).prop("selected") == true ) { + $("#"+to).append(this); + } + }); + } + + function move_all(from, to){ + $("#"+from).children().each(function(){ + $("#"+to).append(this); + }); + } + + + +