From fc007e96d7564084ce4ce8b0e77b7a670ec800dc Mon Sep 17 00:00:00 2001 From: guanghongwei Date: Tue, 3 Mar 2015 18:42:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BE=88=E5=A4=9A=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/AddUserAsset.py | 40 +++--- jumpserver/templatetags/mytags.py | 19 ++- juser/urls.py | 2 + juser/views.py | 223 ++++++++++++++++++------------ templates/juser/dept_detail.html | 42 ++++++ templates/juser/dept_list.html | 29 +++- templates/juser/group_detail.html | 2 +- templates/juser/group_list.html | 35 ++++- templates/juser/user_list.html | 21 ++- templates/nav_bar_header.html | 4 +- 10 files changed, 285 insertions(+), 132 deletions(-) create mode 100644 templates/juser/dept_detail.html diff --git a/docs/AddUserAsset.py b/docs/AddUserAsset.py index 9753e49f6..0996481fa 100644 --- a/docs/AddUserAsset.py +++ b/docs/AddUserAsset.py @@ -2,14 +2,17 @@ import django import os import sys +import random +import datetime sys.path.append('../') os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings' django.setup() -from juser.views import db_add_user, md5_crypt, CRYPTOR + +from juser.views import db_add_user, md5_crypt, CRYPTOR, db_add_group from jasset.models import Asset, IDC, BisGroup -from juser.models import UserGroup +from juser.models import UserGroup, DEPT from jasset.views import jasset_group_add from jperm.models import CmdGroup @@ -29,15 +32,18 @@ def test_add_asset_group(): print 'Add: %s' % name -def test_add_user_group(): - for i in range(1, 20): - name = 'DepartGroup' + str(i) - UserGroup.objects.create(name=name, type='M', comment=name) - print 'Add: %s' % name +def test_add_dept(): + for i in range(1, 100): + name = 'DEPT' + str(i) + print "Add: %s" % name + DEPT.objects.create(name=name, comment=name) - for i in range(1, 20): + +def test_add_group(): + dept_all = DEPT.objects.all() + for i in range(1, 100): name = 'UserGroup' + str(i) - UserGroup.objects.create(name=name, type='A', comment=name) + UserGroup.objects.create(name=name, dept=random.choice(dept_all), comment=name) print 'Add: %s' % name @@ -52,15 +58,18 @@ def test_add_cmd_group(): def test_add_user(): for i in range(1, 500): username = "test" + str(i) + dept_all = DEPT.objects.all() + group_all = UserGroup.objects.all() + group_all_id = [group.id for group in group_all] db_add_user(username=username, password=md5_crypt(username), + dept=random.choice(dept_all), name=username, email='%s@jumpserver.org' % username, - groups=[1,3], role='CU', - ssh_pwd=CRYPTOR.encrypt(username), + groups=[random.choice(group_all_id) for i in range(1, 4)], role='CU', ssh_key_pwd=CRYPTOR.encrypt(username), ldap_pwd=CRYPTOR.encrypt(username), is_active=True, - date_joined=0) + date_joined=datetime.datetime.now()) print "Add: %s" % username @@ -73,11 +82,8 @@ def test_add_asset(): if __name__ == '__main__': - test_add_idc() - test_add_asset_group() - test_add_user_group() - test_add_cmd_group() - test_add_asset() + #test_add_dept() + #test_add_group() test_add_user() diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py index d9cbc30c6..4f9b64dec 100644 --- a/jumpserver/templatetags/mytags.py +++ b/jumpserver/templatetags/mytags.py @@ -4,7 +4,7 @@ import re import time from django import template -from juser.models import User, UserGroup +from juser.models import User, UserGroup, DEPT from jasset.models import BisGroup from jumpserver.views import perm_user_asset @@ -26,16 +26,16 @@ def int2str(value): @register.filter(name='get_role') def get_role(user_id): - user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} + user_role = {'SU': u'超级管理员', 'DA': u'部门管理员', 'CU': u'普通用户'} user = User.objects.get(id=user_id) return user_role.get(str(user.role)) @register.filter(name='groups_str') -def groups_str(username): +def groups_str(user_id): groups = [] - user = User.objects.get(username=username) - for group in user.user_group.filter(type='A'): + user = User.objects.get(id=user_id) + for group in user.group.all(): groups.append(group.name) if len(groups) < 4: return ' '.join(groups) @@ -71,6 +71,15 @@ def member_count(group_id): group = UserGroup.objects.get(id=group_id) return group.user_set.count() +@register.filter(name='dept_member') +def dept_member(dept_id): + dept = DEPT.objects.filter(id=dept_id) + if dept: + dept = dept[0] + return dept.user_set.count() + else: + return 0 + @register.filter(name='perm_count') def perm_count(group_id): diff --git a/juser/urls.py b/juser/urls.py index 8067d52bc..0136ba443 100644 --- a/juser/urls.py +++ b/juser/urls.py @@ -13,6 +13,8 @@ urlpatterns = patterns('juser.views', (r'^group_list/$', 'group_list'), (r'^dept_list/$', 'dept_list'), (r'^dept_add/$', 'dept_add'), + (r'^dept_del/$', 'dept_del'), + (r'^dept_detail/$', 'dept_detail'), (r'^user_detail/$', 'user_detail'), (r'^user_del/$', 'user_del'), (r'^user_edit/$', 'user_edit'), diff --git a/juser/views.py b/juser/views.py index 8dc10e312..d2ce9e3a2 100644 --- a/juser/views.py +++ b/juser/views.py @@ -62,15 +62,7 @@ def gen_sha512(salt, password): return crypt.crypt(password, '$6$%s$' % salt) -def db_add_group(**kwargs): - name = kwargs.get('name') - group = UserGroup.objects.filter(name=name) - if group: - raise AddError(u'用户组 %s 已经存在' % name) - UserGroup(**kwargs).save() - - -def group_add_user(group_name, user_id=None, username=None): +def group_add_user(group, user_id=None, username=None): try: if user_id: user = User.objects.get(id=user_id) @@ -79,10 +71,24 @@ def group_add_user(group_name, user_id=None, username=None): except ObjectDoesNotExist: raise AddError('用户获取失败') else: - group = UserGroup.objects.get(name=group_name) group.user_set.add(user) +def db_add_group(**kwargs): + name = kwargs.get('name') + group = UserGroup.objects.filter(name=name) + users = kwargs.pop('users') + if group: + raise AddError(u'用户组 %s 已经存在' % name) + group = UserGroup(**kwargs) + group.save() + for user_id in users: + group_add_user(group, user_id) + + + + + def group_update_user(group_id, users_id): group = UserGroup.objects.get(id=group_id) group.user_set.clear() @@ -109,12 +115,14 @@ def db_update_user(**kwargs): user = User.objects.filter(username=username) user.update(**kwargs) user = User.objects.get(username=username) - group_select = [] - for group_id in groups_post: - group = UserGroup.objects.filter(id=group_id) - group_select.extend(group) user.save() - user.user_group = group_select + + if groups_post: + group_select = [] + for group_id in groups_post: + group = UserGroup.objects.filter(id=group_id) + group_select.extend(group) + user.user_group = group_select def db_del_user(username): @@ -249,7 +257,11 @@ def dept_add(request): def dept_list(request): header_title, path1, path2 = '查看部门', '用户管理', '查看部门' - contact_list = DEPT.objects.all() + keyword = request.GET.get('search') + if keyword: + contact_list = DEPT.objects.filter(Q(name__icontains=keyword) | Q(comment__icontains=keyword)).order_by('name') + else: + contact_list = DEPT.objects.all() p = paginator = Paginator(contact_list, 10) try: @@ -266,10 +278,32 @@ def dept_list(request): return render_to_response('juser/dept_list.html', locals(), context_instance=RequestContext(request)) -def group_add(request, group_type_select='A'): +def dept_detail(request): + dept_id = request.GET.get('id', None) + if not dept_id: + return HttpResponseRedirect('/juser/dept_list/') + dept = DEPT.objects.filter(id=dept_id) + if dept: + dept = dept[0] + users = dept.user_set.all() + return render_to_response('juser/dept_detail.html', locals(), context_instance=RequestContext(request)) + + +def dept_del(request): + dept_id = request.GET.get('id', None) + if not dept_id: + return HttpResponseRedirect('/juser/dept_list/') + dept = DEPT.objects.filter(id=dept_id) + if dept: + dept = dept[0] + dept.delete() + return HttpResponseRedirect('/juser/dept_list/') + + +def group_add(request): error = '' msg = '' - header_title, path1, path2 = '添加属组', '用户管理', '添加用户组' + header_title, path1, path2 = '添加小组', '用户管理', '添加小组' user_all = User.objects.all() dept_all = DEPT.objects.all() @@ -290,7 +324,7 @@ def group_add(request, group_type_select='A'): else: AddError(u'部门不存在') - db_add_group(name=group_name, dept=dept, comment=comment) + db_add_group(name=group_name, users=users_selected, dept=dept, comment=comment) except AddError: pass except TypeError: @@ -302,8 +336,12 @@ def group_add(request, group_type_select='A'): def group_list(request): - header_title, path1, path2 = '查看属组 | Show Group', '用户管理', '查看用户组' - contact_list = UserGroup.objects.all() + header_title, path1, path2 = '查看小组', '用户管理', '查看小组' + keyword = request.GET.get('search', '') + if keyword: + contact_list = UserGroup.objects.filter(Q(name__icontains=keyword) | Q(comment__icontains=keyword)) + else: + contact_list = UserGroup.objects.all().order_by('name') p = paginator = Paginator(contact_list, 10) try: @@ -370,10 +408,80 @@ def group_edit(request): return HttpResponseRedirect('/juser/group_list/') +def user_add(request): + error = '' + msg = '' + header_title, path1, path2 = '添加用户 | User Add', '用户管理', '添加用户' + user_role = {'SU': u'超级管理员', 'DA': u'部门管理员', 'CU': u'普通用户'} + dept_all = DEPT.objects.all() + group_all = UserGroup.objects.all() + + if request.method == 'POST': + username = request.POST.get('username', '') + password = request.POST.get('password', '') + name = request.POST.get('name', '') + email = request.POST.get('email', '') + dept_id = request.POST.get('dept_id') + groups = request.POST.getlist('groups', []) + role_post = request.POST.get('role', 'CU') + ssh_key_pwd = request.POST.get('ssh_key_pwd', '') + is_active = request.POST.get('is_active', '1') + ldap_pwd = gen_rand_pwd(16) + + try: + if None in [username, password, ssh_key_pwd, name, groups, role_post, is_active]: + error = u'带*内容不能为空' + raise AddError + user = User.objects.filter(username=username) + if user: + error = u'用户 %s 已存在' % username + raise AddError + + dept = DEPT.objects.filter(id=dept_id) + if dept: + dept = dept[0] + else: + error = u'部门不存在' + raise AddError(error) + + except AddError: + pass + else: + try: + db_add_user(username=username, + password=md5_crypt(password), + name=name, email=email, dept=dept, + groups=groups, role=role_post, + ssh_key_pwd=CRYPTOR.encrypt(ssh_key_pwd), + ldap_pwd=CRYPTOR.encrypt(ldap_pwd), + is_active=is_active, + date_joined=datetime.datetime.now()) + + server_add_user(username, password, ssh_key_pwd) + if LDAP_ENABLE: + ldap_add_user(username, ldap_pwd) + msg = u'添加用户 %s 成功!' % username + + except Exception, e: + error = u'添加用户 %s 失败 %s ' % (username, e) + try: + db_del_user(username) + server_del_user(username) + if LDAP_ENABLE: + ldap_del_user(username) + except Exception: + pass + return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request)) + + def user_list(request): user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} - header_title, path1, path2 = '查看用户 | Show User', '用户管理', '用户列表' - users = contact_list = User.objects.all().order_by('id') + header_title, path1, path2 = '查看用户', '用户管理', '用户列表' + keyword = request.GET.get('search', '') + if keyword: + contact_list = User.objects.filter(Q(username__icontains=keyword) | Q(name__icontains=keyword)).order_by('name') + else: + contact_list = User.objects.all().order_by('id') p = paginator = Paginator(contact_list, 10) try: @@ -479,72 +587,6 @@ def user_edit(request): return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request)) -def user_add(request): - error = '' - msg = '' - header_title, path1, path2 = '添加用户 | User Add', '用户管理', '添加用户' - user_role = {'SU': u'超级管理员', 'DA': u'部门管理员', 'CU': u'普通用户'} - dept_all = DEPT.objects.all() - group_all = UserGroup.objects.all() - - if request.method == 'POST': - username = request.POST.get('username', '') - password = request.POST.get('password', '') - name = request.POST.get('name', '') - email = request.POST.get('email', '') - dept_id = request.POST.get('dept_id') - groups = request.POST.getlist('groups', []) - role_post = request.POST.get('role', 'CU') - ssh_key_pwd = request.POST.get('ssh_key_pwd', '') - is_active = request.POST.get('is_active', '1') - ldap_pwd = gen_rand_pwd(16) - - try: - if None in [username, password, ssh_key_pwd, name, groups, role_post, is_active]: - error = u'带*内容不能为空' - raise AddError - user = User.objects.filter(username=username) - if user: - error = u'用户 %s 已存在' % username - raise AddError - - dept = DEPT.objects.filter(id=dept_id) - if dept: - dept = dept[0] - else: - error = u'部门不存在' - raise AddError(error) - - except AddError: - pass - else: - try: - db_add_user(username=username, - password=md5_crypt(password), - name=name, email=email, dept=dept, - groups=groups, role=role_post, - ssh_key_pwd=CRYPTOR.encrypt(ssh_key_pwd), - ldap_pwd=CRYPTOR.encrypt(ldap_pwd), - is_active=is_active, - date_joined=datetime.datetime.now()) - - server_add_user(username, password, ssh_key_pwd) - if LDAP_ENABLE: - ldap_add_user(username, ldap_pwd) - msg = u'添加用户 %s 成功!' % username - - except Exception, e: - error = u'添加用户 %s 失败 %s ' % (username, e) - try: - db_del_user(username) - server_del_user(username) - if LDAP_ENABLE: - ldap_del_user(username) - except Exception: - pass - return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request)) - - def profile(request): user_id = request.session.get('user_id') if not user_id: @@ -558,6 +600,3 @@ def chg_pass(request): return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request)) - - - diff --git a/templates/juser/dept_detail.html b/templates/juser/dept_detail.html new file mode 100644 index 000000000..860edba13 --- /dev/null +++ b/templates/juser/dept_detail.html @@ -0,0 +1,42 @@ +{% load mytags %} + + + {% include 'link_css.html' %} + + + + + +
+
+

{{ dept.name }} 部门成员

+
+ + + + + + + + + + {% for user in users %} + + + + + + {% endfor %} + + + +
用户名姓名角色
{{ user.username }}{{ user.name }}{{ user.id|get_role }}
+
+
+ + \ No newline at end of file diff --git a/templates/juser/dept_list.html b/templates/juser/dept_list.html index 1f8221f3b..8fbbfde42 100644 --- a/templates/juser/dept_list.html +++ b/templates/juser/dept_list.html @@ -31,11 +31,25 @@
添加 + 删除所选 +
+ @@ -45,13 +59,16 @@ {% for dept in contacts.object_list %} + - + {% endfor %} @@ -75,8 +92,8 @@ Previous {% endif %} - {% for page in p.page_range %} - {% ifequal offset1 page %} + {% for page in page_range %} + {% ifequal current_page page %}
  • {{ page }}
  • {% else %}
  • {{ page }}
  • diff --git a/templates/juser/group_detail.html b/templates/juser/group_detail.html index 46c205d07..6046a3b82 100644 --- a/templates/juser/group_detail.html +++ b/templates/juser/group_detail.html @@ -14,7 +14,7 @@
    -

    {{ group.name }} 属组详情

    +

    {{ group.name }} 组中成员

    + + 部门名称 成员数量 备注
    + + {{ dept.name }} {{ dept.name }} {{ dept.id | dept_member }} {{ dept.comment }} - 成员 - 编辑 - 删除 + 成员 + 编辑 + 删除
    diff --git a/templates/juser/group_list.html b/templates/juser/group_list.html index f68e97da0..e58b12a0c 100644 --- a/templates/juser/group_list.html +++ b/templates/juser/group_list.html @@ -31,11 +31,26 @@
    添加 + + 删除所选 + +
    + +
    + +
    +
    +
    + @@ -46,9 +61,12 @@ {% for group in contacts.object_list %} + - +
    + + 组名 所属部门 成员数量
    + + {{ group.name }} {{ group.dept.name }} {{ group.name }} {{ group.id | member_count }} {{ group.comment }} 成员 @@ -77,8 +95,8 @@ Previous {% endif %} - {% for page in p.page_range %} - {% ifequal offset1 page %} + {% for page in page_range %} + {% ifequal current_page page %}
  • {{ page }}
  • {% else %}
  • {{ page }}
  • @@ -107,6 +125,17 @@ $(document).ready(function(){ $(".iframe").colorbox({iframe:true, width:"70%", height:"70%"}); }); + +{# function user_group_search(){#} +{# $.ajax({#} +{# type: "GET",#} +{# url: "/juser/group_search/",#} +{# data: $("#search_form").serialize(),#} +{# success: function (data) {#} +{# $("#contents_form").html(data);#} +{# }#} +{# });#} +{# }#} {% endblock %} \ No newline at end of file diff --git a/templates/juser/user_list.html b/templates/juser/user_list.html index 2fdf613b3..6e561640a 100644 --- a/templates/juser/user_list.html +++ b/templates/juser/user_list.html @@ -31,6 +31,17 @@
    添加 + 删除所选 +
    @@ -39,11 +50,10 @@ - - + @@ -55,12 +65,11 @@ - - - - + + +
    ID 用户名 姓名 部门用户组小组 角色 激活 操作 {{ user.id }} {{ user.username }} {{ user.name }} {{ user.username|group_manage_str }} {{ user.username|groups_str }}{{ user.id|get_role }} {{ user.dept.name }} {{ user.id | groups_str }} {{ user.id | get_role }} {{ user.is_active|bool2str }} 详情 diff --git a/templates/nav_bar_header.html b/templates/nav_bar_header.html index 7d4d3bb79..b29dc9fb8 100644 --- a/templates/nav_bar_header.html +++ b/templates/nav_bar_header.html @@ -1,9 +1,9 @@