From 0336bfa906c384578ce7948b36d8f514651b5722 Mon Sep 17 00:00:00 2001 From: guanghongwei Date: Sun, 1 Feb 2015 23:03:28 +0800 Subject: [PATCH 1/3] =?UTF-8?q?group=5Fadd=E4=BD=BF=E7=94=A8ajax?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- connect.py | 1 + jumpserver/templatetags/mytags.py | 16 +++- jumpserver/urls.py | 1 + juser/urls.py | 1 + juser/views.py | 62 +++++++++---- templates/foot_script.html | 7 +- templates/head_script.html | 16 ++-- templates/juser/group_add.html | 37 +++++--- templates/juser/group_add_ajax.html | 4 + templates/juser/group_edit.html | 133 ++++++++++++++++++++++++++++ templates/juser/user_add.html | 35 +++++--- templates/juser/user_list.html | 4 +- templates/test.html | 74 ++++++++++++++++ 13 files changed, 333 insertions(+), 58 deletions(-) create mode 100644 templates/juser/group_add_ajax.html create mode 100644 templates/juser/group_edit.html create mode 100644 templates/test.html diff --git a/connect.py b/connect.py index dc9a6ae31..03f03a5c4 100755 --- a/connect.py +++ b/connect.py @@ -259,6 +259,7 @@ def verify_connect(username, part_ip): color_print('No Permission or No host.', 'red') else: username, password, host, port = get_connect_item(username, ip_matched[0]) + print username, password, host, port connect(username, password, host, port, LOGIN_NAME) diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py index 01b81d486..43bfca702 100644 --- a/jumpserver/templatetags/mytags.py +++ b/jumpserver/templatetags/mytags.py @@ -33,7 +33,7 @@ def get_role(user_id): def groups_str(username): groups = [] user = User.objects.get(username=username) - for group in user.user_group.filter(Q(type='A') | Q(type='M')): + for group in user.user_group.filter(type='A'): groups.append(group.name) if len(groups) < 4: return ' '.join(groups) @@ -41,6 +41,16 @@ def groups_str(username): return "%s ..." % ' '.join(groups[0:3]) +@register.filter(name='group_manage_str') +def group_manage_str(username): + user = User.objects.get(username=username) + group = user.user_group.filter(type='M') + if group: + return group[0].name + else: + return '' + + @register.filter(name='get_item') def get_item(dictionary, key): return dictionary.get(key) @@ -70,8 +80,8 @@ def perm_count(group_id): def group_type_to_str(type_name): group_types = { 'P': '私有组', - 'M': '管理组', - 'A': '授权组', + 'M': '部门', + 'A': '用户组', } return group_types.get(type_name) diff --git a/jumpserver/urls.py b/jumpserver/urls.py index 9352fc543..dff10261d 100644 --- a/jumpserver/urls.py +++ b/jumpserver/urls.py @@ -14,4 +14,5 @@ urlpatterns = patterns('', (r'^jasset/', include('jasset.urls')), (r'^jlog/', include('jlog.urls')), (r'^jperm/', include('jperm.urls')), + ) diff --git a/juser/urls.py b/juser/urls.py index d9c51dc6f..0f35ece07 100644 --- a/juser/urls.py +++ b/juser/urls.py @@ -9,6 +9,7 @@ urlpatterns = patterns('juser.views', (r'^user_add/$', 'user_add'), (r'^user_list/$', 'user_list'), (r'^group_add/$', 'group_add'), + (r'^group_add_ajax/$', 'group_add_ajax'), (r'^group_list/$', 'group_list'), (r'^user_detail/$', 'user_detail'), (r'^user_del/$', 'user_del'), diff --git a/juser/views.py b/juser/views.py index 875754003..a93d267b4 100644 --- a/juser/views.py +++ b/juser/views.py @@ -4,7 +4,6 @@ import time import os -import hashlib import random import subprocess import ldap @@ -17,12 +16,14 @@ from django.shortcuts import render_to_response from django.core.exceptions import ObjectDoesNotExist from django.db.models import Q from django.http import HttpResponse +from django.core.paginator import Paginator, EmptyPage, InvalidPage from juser.models import UserGroup, User from connect import PyCrypt, KEY from connect import BASE_DIR from connect import CONF -from django.core.paginator import Paginator, EmptyPage, InvalidPage +from jumpserver.views import md5_crypt + CRYPTOR = PyCrypt(KEY) LDAP_ENABLE = CONF.getint('ldap', 'ldap_enable') @@ -253,16 +254,22 @@ def ldap_del_user(username): ldap_conn.delete(sudo_dn) -def group_add(request): +def group_add(request, group_type_select='A'): error = '' msg = '' header_title, path1, path2 = '添加属组 | Add Group', 'juser', 'group_add' group_types = { # 'P': '私有组', - 'M': '管理组', - 'A': '授权组', + 'M': '部门', + 'A': '用户组', } - users = User.objects.all() + + users_all = User.objects.all() + if group_type_select == 'M': + users = [user for user in users_all if not user.user_group.filter(type='M')] + else: + users = users_all + if request.method == 'POST': group_name = request.POST.get('group_name', '') group_type = request.POST.get('group_type', 'A') @@ -287,9 +294,20 @@ def group_add(request): return render_to_response('juser/group_add.html', locals()) +def group_add_ajax(request): + group_type = request.POST.get('type', 'A') + users_all = User.objects.all() + if group_type == 'A': + users = users_all + else: + users = [user for user in users_all if not user.user_group.filter(type='M')] + + return render_to_response('juser/group_add_ajax.html', locals()) + + def group_list(request): header_title, path1, path2 = '查看属组 | Show Group', 'juser', 'group_list' - groups = contact_list = UserGroup.objects.filter(Q(type='M') | Q(type='A')).order_by('id') + groups = contact_list = UserGroup.objects.filter(Q(type='M') | Q(type='A')).order_by('type') p = paginator = Paginator(contact_list, 10) try: @@ -328,8 +346,8 @@ def group_edit(request): header_title, path1, path2 = '修改属组 | Edit Group', 'juser', 'group_edit' group_types = { # 'P': '私有组', - 'M': '管理组', - 'A': '授权组', + 'M': '部门', + 'A': '用户组', } if request.method == 'GET': group_id = request.GET.get('id', None) @@ -341,7 +359,7 @@ def group_edit(request): users_selected = group.user_set.all() users = [user for user in users_all if user not in users_selected] - return render_to_response('juser/group_add.html', locals()) + return render_to_response('juser/group_edit.html', locals()) else: group_id = request.POST.get('group_id', None) group_name = request.POST.get('group_name', None) @@ -407,9 +425,10 @@ def user_edit(request): password = user.password ssh_key_pwd = user.ssh_key_pwd name = user.name - all_group = UserGroup.objects.filter(Q(type='M') | Q(type='A')) - groups = user.user_group.filter(Q(type='M') | Q(type='A')) - groups_str = ' '.join([str(group.id) for group in groups]) + manage_groups = UserGroup.objects.filter(type='M') + auth_groups = UserGroup.objects.filter(type='A') + manage_group_id = user.user_group.get(type='M').id + groups_str = ' '.join([str(group.id) for group in auth_groups]) user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} role_post = user.role ssh_pwd = user.ssh_pwd @@ -420,8 +439,11 @@ def user_edit(request): password = request.POST.get('password', None) name = request.POST.get('name', None) email = request.POST.get('email', '') - groups = request.POST.getlist('groups', None) - groups_str = ' '.join(groups) + manage_group_id = request.POST.get('manage_group', '') + auth_groups = request.POST.getlist('groups', None) + groups = auth_groups + groups.append(manage_group_id) + groups_str = ' '.join(auth_groups) role_post = request.POST.get('role', None) ssh_pwd = request.POST.get('ssh_pwd', None) ssh_key_pwd = request.POST.get('ssh_key_pwd', None) @@ -464,14 +486,18 @@ def user_add(request): msg = '' header_title, path1, path2 = '添加用户 | Add User', 'juser', 'user_add' user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} - all_group = UserGroup.objects.filter(Q(type='M') | Q(type='A')).order_by('-type') + manage_groups = UserGroup.objects.filter(type='M') + auth_groups = UserGroup.objects.filter(type='A') if request.method == 'POST': username = request.POST.get('username', None) password = request.POST.get('password', '') name = request.POST.get('name', None) email = request.POST.get('email', '') - groups = request.POST.getlist('groups', None) - groups_str = ' '.join(groups) + manage_group_id = request.POST.get('manage_group') + auth_groups = request.POST.getlist('groups', None) + groups = auth_groups + groups.append(manage_group_id) + groups_str = ' '.join(auth_groups) role_post = request.POST.get('role', 'CU') ssh_pwd = request.POST.get('ssh_pwd', '') ssh_key_pwd = request.POST.get('ssh_key_pwd', '') diff --git a/templates/foot_script.html b/templates/foot_script.html index fcc41f092..acab8b8a3 100644 --- a/templates/foot_script.html +++ b/templates/foot_script.html @@ -1,5 +1,6 @@ - + + @@ -18,6 +19,10 @@ + + + + - + - + + + - - - + diff --git a/templates/juser/group_add.html b/templates/juser/group_add.html index db20f8506..c5d96d522 100644 --- a/templates/juser/group_add.html +++ b/templates/juser/group_add.html @@ -34,12 +34,6 @@ {% if msg %}
{{ msg }}
{% endif %} -
@@ -50,9 +44,9 @@
- {% for t, type_name in group_types.items %} - {% ifequal t group_type %} + {% ifequal t group_type_select %} {% else %} @@ -63,7 +57,7 @@
- +
- {% for user in users_selected %} - - {% endfor %}
@@ -98,8 +89,8 @@
- - + +
@@ -131,5 +122,23 @@ $('#groupForm').validator({ form.submit(); } }); + +function change_type(type){ + $.post('/juser/group_add_ajax/', + {'type': type}, + function(data){ + $('#users').html(data) + }) +} + +$(document).ready(function(){ + $("#submit_button").click(function(){ + $('#users_selected option').each(function(){ + $(this).prop('selected', true) + }) + }) +}) + + {% endblock %} \ No newline at end of file diff --git a/templates/juser/group_add_ajax.html b/templates/juser/group_add_ajax.html new file mode 100644 index 000000000..e842df809 --- /dev/null +++ b/templates/juser/group_add_ajax.html @@ -0,0 +1,4 @@ +{% for user in users %} + +{% endfor %} + diff --git a/templates/juser/group_edit.html b/templates/juser/group_edit.html new file mode 100644 index 000000000..bcbd63d56 --- /dev/null +++ b/templates/juser/group_edit.html @@ -0,0 +1,133 @@ +{% extends 'base.html' %} +{% load mytags %} +{% block content %} + {% include 'nav_cat_bar.html' %} +
+
+
+
+
+
填写基本信息 Fill group info.
+ +
+
+
+ {% if error %} +
{{ error }}
+ {% endif %} + {% if msg %} +
{{ msg }}
+ {% endif %} +
+ +
+ + +
+
+
+
+ +
+ + +
+
+
+
+ +
+ +
+
+
+ + +
+
+
+
+ +
+
+
+
+
+ +
+ +
+
+ +
+
+
+ + +
+
+
+
+
+
+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/templates/juser/user_add.html b/templates/juser/user_add.html index 68bf3f1a5..5513c1a3c 100644 --- a/templates/juser/user_add.html +++ b/templates/juser/user_add.html @@ -71,21 +71,36 @@
- +
- + {% for group in manage_groups %} + {% ifequal group.id manage_group_id %} + + {% else %} + + {% endifequal %} + {% endfor %} + +
+
+
+
+ +
+ +
+ +
+
+ +
@@ -47,13 +59,15 @@ 组名 - 类型 + + 类型 + 成员数量 授权数量 操作 - + {% for group in contacts.object_list %} {{ group.name }} @@ -61,7 +75,7 @@ {{ group.id|member_count }} {{ group.id|perm_count }} - 详情 + 详情 编辑 删除 @@ -120,7 +134,7 @@ 操作 - + {% for user in contacts2.object_list %} {{ user.name }} @@ -128,7 +142,7 @@ {{ user.username | groups_str }} {{ user.id | perm_asset_count }} - 详情 + 详情 {% endfor %} @@ -192,6 +206,29 @@ $(document).ready(function(){ $(".iframe").colorbox({iframe:true, width:"70%", height:"70%"}); }); + + $(document).ready(function(){ + $('#search_btn').click(function(){ + if ($('#tab2').attr('class') == 'active'){ + var tab='tab2' + } else { + var tab='tab1' + } + + var search=$('#search_input').val() + + $.post('/jperm/perm_list_ajax/', + {'tab': tab, 'search': search}, + function(data){ + if ($('#tab2').attr('class') == 'active'){ + $('#tab-2').html(data) + } else { + $('#tab-1').html(data) + } + }) + + }) + }) {% endblock %} \ No newline at end of file diff --git a/templates/jperm/perm_list_ajax.html b/templates/jperm/perm_list_ajax.html new file mode 100644 index 000000000..64a15a0f2 --- /dev/null +++ b/templates/jperm/perm_list_ajax.html @@ -0,0 +1,132 @@ +{% load mytags %} +{% ifequal tab 'tab1' %} + + + + + + + + + + + + {% for group in contacts.object_list %} + + + + + + + + {% endfor %} + +
组名 + 类型 + 成员数量授权数量操作
{{ group.name }} {{ group.type|group_type_to_str }} {{ group.id|member_count }} {{ group.id|perm_count }} + 详情 + 编辑 + 删除 +
+
+
+
+ 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 %} +
+
+
+
+{% else %} + + + + + + + + + + + + {% for user in contacts2.object_list %} + + + + + + + + {% endfor %} + +
用户角色属组主机数量操作
{{ user.name }} {{ user.id | get_role }} {{ user.username | groups_str }} {{ user.id | perm_asset_count }} + 详情 +
+
+
+
+ Showing {{ contacts2.start_index }} to {{ contacts2.end_index }} of {{ p2.count }} entries +
+
+
+
+
    + {% if contacts2.has_previous %} + + {% else %} + + {% endif %} + {% for page in p2.page_range %} + {% ifequal offset1 page %} +
  • {{ page }}
  • + {% else %} +
  • {{ page }}
  • + {% endifequal %} + {% endfor %} + {% if contacts2.has_next %} + + {% else %} + + {% endif %} +
+
+
+
+{% endifequal %} \ No newline at end of file diff --git a/templates/juser/group_list.html b/templates/juser/group_list.html index 0a045d8f7..50cb1c795 100644 --- a/templates/juser/group_list.html +++ b/templates/juser/group_list.html @@ -53,7 +53,7 @@ {{ group.id|member_count }} {{ group.comment }} - 成员 + 成员 编辑 删除 diff --git a/templates/juser/user_list.html b/templates/juser/user_list.html index e7efcd216..3855a786e 100644 --- a/templates/juser/user_list.html +++ b/templates/juser/user_list.html @@ -63,7 +63,7 @@ {{ user.id|get_role }} {{ user.is_active|bool2str }} - 详情 + 详情 编辑 删除 @@ -115,10 +115,5 @@
- {% endblock %} diff --git a/templates/nav.html b/templates/nav.html index f4c069580..29cc7ff9b 100644 --- a/templates/nav.html +++ b/templates/nav.html @@ -14,7 +14,7 @@
  • 用户管理