From 35c818f4a08a83b4610267db91e4c7eb67929051 Mon Sep 17 00:00:00 2001 From: ibuler Date: Sun, 6 Dec 2015 00:28:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jasset/views.py | 9 ++- jperm/perm_api.py | 9 ++- jperm/views.py | 11 +++- jumpserver/templatetags/mytags.py | 12 +++- juser/views.py | 43 +++++--------- templates/jasset/asset_list.html | 3 +- templates/juser/user_detail.html | 97 ++++++++++++++++++++----------- templates/juser/user_list.html | 7 ++- 8 files changed, 114 insertions(+), 77 deletions(-) diff --git a/jasset/views.py b/jasset/views.py index 0f7cb55b6..ea0c1ccf9 100644 --- a/jasset/views.py +++ b/jasset/views.py @@ -97,7 +97,9 @@ def group_list(request): header_title, path1, path2 = u'查看资产组', u'资产管理', u'查看资产组' keyword = request.GET.get('keyword', '') asset_group_list = AssetGroup.objects.all() - + group_id = request.GET.get('id') + if group_id: + asset_group_list = asset_group_list.filter(id=group_id) if keyword: asset_group_list = asset_group_list.filter(Q(name__contains=keyword) | Q(comment__contains=keyword)) @@ -261,7 +263,7 @@ def asset_list(request): asset_group_all = AssetGroup.objects.all() asset_types = ASSET_TYPE asset_status = ASSET_STATUS - + asset_id = request.GET.get('id') idc_name = request.GET.get('idc', '') group_name = request.GET.get('group', '') asset_type = request.GET.get('asset_type', '') @@ -294,6 +296,9 @@ def asset_list(request): if status: asset_find = asset_find.filter(status__contains=status) + if asset_id: + asset_find = asset_find.filter(id=asset_id) + if keyword: asset_find = asset_find.filter( Q(hostname__contains=keyword) | diff --git a/jperm/perm_api.py b/jperm/perm_api.py index 224d6d2a5..9e4d014cd 100644 --- a/jperm/perm_api.py +++ b/jperm/perm_api.py @@ -43,13 +43,16 @@ def get_group_user_perm(ob): asset_groups = rule.asset_group.all() assets = rule.asset.all() perm_roles = rule.role.all() + group_assets = [] + for asset_group in asset_groups: + group_assets.extend(asset_group.asset_set.all()) # 获取一个规则授权的角色和对应主机 for role in perm_roles: - if perm_role.get('role'): - perm_role[role]['asset'] = perm_role[role].get('asset', set()).union(set(assets)) + if perm_role.get(role): + perm_role[role]['asset'] = perm_role[role].get('asset', set()).union(set(assets).union(set(group_assets))) perm_role[role]['asset_group'] = perm_role[role].get('asset_group', set()).union(set(asset_groups)) else: - perm_role[role] = {'asset': set(assets), 'asset_group': set(asset_groups)} + perm_role[role] = {'asset': set(assets).union(set(group_assets)), 'asset_group': set(asset_groups)} # 获取一个规则用户授权的资产 for asset in assets: diff --git a/jperm/views.py b/jperm/views.py index 9d8fdc281..1529907d7 100644 --- a/jperm/views.py +++ b/jperm/views.py @@ -23,12 +23,14 @@ def perm_rule_list(request): """ # 渲染数据 header_title, path1, path2 = "授权规则", "规则管理", "查看规则" - # 获取所有规则 rules_list = PermRule.objects.all() - + rule_id = request.GET.get('id') # TODO: 搜索和分页 keyword = request.GET.get('search', '') + if rule_id: + rules_list = rules_list.filter(id=rule_id) + if keyword: rules_list = rules_list.filter(Q(name=keyword)) @@ -226,12 +228,15 @@ def perm_role_list(request): # 获取所有系统角色 roles_list = PermRole.objects.all() - + role_id = request.GET.get('id') # TODO: 搜索和分页 keyword = request.GET.get('search', '') if keyword: roles_list = roles_list.filter(Q(name=keyword)) + if role_id: + roles_list = roles_list.filter(id=role_id) + roles_list, p, roles, page_range, current_page, show_first, show_end = pages(roles_list, request) return my_render('jperm/perm_role_list.html', locals(), request) diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py index af41f6b0e..b7d7fde93 100644 --- a/jumpserver/templatetags/mytags.py +++ b/jumpserver/templatetags/mytags.py @@ -7,7 +7,7 @@ import time from django import template from jperm.models import PermPush from jumpserver.api import * -from jasset.models import AssetAlias +from jperm.perm_api import get_group_user_perm register = template.Library() @@ -294,3 +294,13 @@ def get_disk_info(disk_info): except Exception: disk_size = '' return disk_size + + +@register.filter(name='user_perm_asset_num') +def user_perm_asset_num(user_id): + user = get_object(User, id=user_id) + if user: + user_perm_info = get_group_user_perm(user) + return len(user_perm_info.get('asset').keys()) + else: + return 0 diff --git a/juser/views.py b/juser/views.py index 4f1183d84..695873135 100644 --- a/juser/views.py +++ b/juser/views.py @@ -231,24 +231,20 @@ def user_list(request): @require_role(role='user') def user_detail(request): header_title, path1, path2 = '用户详情', '用户管理', '用户详情' - # if request.session.get('role_id') == 0: - # user_id = request.user.id - # else: - # user_id = request.GET.get('id', '') - # if request.session.get('role_id') == 1: - # user, dept = get_session_user_dept(request) - # if not validate(request, user=[user_id]): - # return HttpResponseRedirect('/') - user_id = request.GET.get('id', '') - if not user_id: + if request.session.get('role_id') == 0: + user_id = request.user.id + else: + user_id = request.GET.get('id', '') + + user = get_object(User, id=user_id) + if not user: return HttpResponseRedirect('/juser/user_list/') - user = User.objects.get(id=user_id) - # if user: - # pass - # asset_group_permed = user.get_asset_group() - # logs_last = Log.objects.filter(user=user.name).order_by('-start_time')[0:10] - # logs_all = Log.objects.filter(user=user.name).order_by('-start_time') - # logs_num = len(logs_all) + + user_perm_info = get_group_user_perm(user) + role_assets = user_perm_info.get('role') + user_log_ten = Log.objects.filter(user=user.username).order_by('id')[0:10] + user_log_last = Log.objects.filter(user=user.username).order_by('id')[0:50] + user_log_last_num = len(user_log_last) return my_render('juser/user_detail.html', locals(), request) @@ -406,11 +402,6 @@ def user_edit(request): return my_render('juser/user_edit.html', locals(), request) -# @require_role(role='admin') -def user_edit_adm(request): - pass - - def profile(request): a = request.user.id a = request.user.groups @@ -489,11 +480,3 @@ def down_key(request): return response return HttpResponse('No Key File. Contact Admin.') - -@require_role(role='user') -def RunCommand(request): - if request.method == 'GET': - GUP = get_group_user_perm(request.user) - print GUP - assets = GUP.get('asset') - return render_to_response('juser/run_command.html', locals(), context_instance=RequestContext(request)) \ No newline at end of file diff --git a/templates/jasset/asset_list.html b/templates/jasset/asset_list.html index 175271e73..6f7e856cd 100644 --- a/templates/jasset/asset_list.html +++ b/templates/jasset/asset_list.html @@ -222,7 +222,7 @@ var url='/jperm/role/get/?id=' + $(this).attr('value'); var href = $(this).attr('href'); var new_url = '/jlog/web_terminal/?id=' + $(this).attr('value') + '&role='; - var hostname = $(this).closest('tr').find('.hostname')[0].innerHTML; + var hostname = $(this).closest('tr').find('.hostname a')[0].innerHTML; $.ajax({ type: 'GET', url: url, @@ -247,6 +247,7 @@ $.each(dataArray, function(index, value){ aUrl += '' + value + ' ' }); + console.log(aUrl); layer.alert(aUrl, { skin: 'layui-layer-molv', title: '多个角色,请选择一个连接', diff --git a/templates/juser/user_detail.html b/templates/juser/user_detail.html index 8f5517af2..12d47e84f 100644 --- a/templates/juser/user_detail.html +++ b/templates/juser/user_detail.html @@ -76,6 +76,36 @@ + + 授权主机数量 + + {{ user_perm_info.asset.keys | length }} + + + + 授权主机组 + + + {% for group in user_perm_info.asset_group.keys%} + + + + {% endfor %} +
{{ group.name }}
+ + + + 授权规则 + + + {% for rule in user_perm_info.rule%} + + + + {% endfor %} +
{{ rule.name }}
+ + @@ -94,10 +124,6 @@ @@ -106,33 +132,35 @@

用户的所有授权主机

- 这里包含了用户所有的主机组和组下的主机. + 这里包含了用户授权角色和角色下的主机.
-{# {% for group in user|get_user_asset_group %}#} -{#
#} -{#
#} -{#
#} -{# #} -{# {{ group.name }}#} -{#
#} -{# 共: {{ group | group_asset_list_count }}台#} -{#
#} -{#
#} -{#

{{ group.comment }}

#} -{#

#} -{# {% for asset in group|group_asset_list %}#} -{# {{ asset.ip }}
#} -{# {% endfor %}#} -{#

#} -{#

#} -{#
#} -{#
#} -{#
#} -{# {% endfor %}#} -{# {% if not user|get_user_asset_group %}#} -{# (无)#} -{# {% endif %}#} + {% for role, assets in role_assets.items %} +
+
+
+ + + {{ role.name }} +
+ 共: {{ assets.asset | length }}台 +
+
+

+ {{ role.comment }}

+

+ {% for asset in assets.asset %} + {{ asset.hostname }}
+ {% endfor %} +

+

+
+
+
+ {% endfor %} + {% ifequal '{{ asset.asset | length }}' 0 %} + (无) + {% endifequal %}
@@ -147,8 +175,9 @@
- {% if logs_num > 10 %} - + {% if user_log_last_num > 10 %} + {% endif %}