用户详情

pull/26/head
ibuler 2015-12-06 00:28:43 +08:00
parent 532646a431
commit 35c818f4a0
8 changed files with 114 additions and 77 deletions

View File

@ -97,7 +97,9 @@ def group_list(request):
header_title, path1, path2 = u'查看资产组', u'资产管理', u'查看资产组' header_title, path1, path2 = u'查看资产组', u'资产管理', u'查看资产组'
keyword = request.GET.get('keyword', '') keyword = request.GET.get('keyword', '')
asset_group_list = AssetGroup.objects.all() 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: if keyword:
asset_group_list = asset_group_list.filter(Q(name__contains=keyword) | Q(comment__contains=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_group_all = AssetGroup.objects.all()
asset_types = ASSET_TYPE asset_types = ASSET_TYPE
asset_status = ASSET_STATUS asset_status = ASSET_STATUS
asset_id = request.GET.get('id')
idc_name = request.GET.get('idc', '') idc_name = request.GET.get('idc', '')
group_name = request.GET.get('group', '') group_name = request.GET.get('group', '')
asset_type = request.GET.get('asset_type', '') asset_type = request.GET.get('asset_type', '')
@ -294,6 +296,9 @@ def asset_list(request):
if status: if status:
asset_find = asset_find.filter(status__contains=status) asset_find = asset_find.filter(status__contains=status)
if asset_id:
asset_find = asset_find.filter(id=asset_id)
if keyword: if keyword:
asset_find = asset_find.filter( asset_find = asset_find.filter(
Q(hostname__contains=keyword) | Q(hostname__contains=keyword) |

View File

@ -43,13 +43,16 @@ def get_group_user_perm(ob):
asset_groups = rule.asset_group.all() asset_groups = rule.asset_group.all()
assets = rule.asset.all() assets = rule.asset.all()
perm_roles = rule.role.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: for role in perm_roles:
if perm_role.get('role'): if perm_role.get(role):
perm_role[role]['asset'] = perm_role[role].get('asset', set()).union(set(assets)) 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)) perm_role[role]['asset_group'] = perm_role[role].get('asset_group', set()).union(set(asset_groups))
else: 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: for asset in assets:

View File

@ -23,12 +23,14 @@ def perm_rule_list(request):
""" """
# 渲染数据 # 渲染数据
header_title, path1, path2 = "授权规则", "规则管理", "查看规则" header_title, path1, path2 = "授权规则", "规则管理", "查看规则"
# 获取所有规则 # 获取所有规则
rules_list = PermRule.objects.all() rules_list = PermRule.objects.all()
rule_id = request.GET.get('id')
# TODO: 搜索和分页 # TODO: 搜索和分页
keyword = request.GET.get('search', '') keyword = request.GET.get('search', '')
if rule_id:
rules_list = rules_list.filter(id=rule_id)
if keyword: if keyword:
rules_list = rules_list.filter(Q(name=keyword)) rules_list = rules_list.filter(Q(name=keyword))
@ -226,12 +228,15 @@ def perm_role_list(request):
# 获取所有系统角色 # 获取所有系统角色
roles_list = PermRole.objects.all() roles_list = PermRole.objects.all()
role_id = request.GET.get('id')
# TODO: 搜索和分页 # TODO: 搜索和分页
keyword = request.GET.get('search', '') keyword = request.GET.get('search', '')
if keyword: if keyword:
roles_list = roles_list.filter(Q(name=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) 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) return my_render('jperm/perm_role_list.html', locals(), request)

View File

@ -7,7 +7,7 @@ import time
from django import template from django import template
from jperm.models import PermPush from jperm.models import PermPush
from jumpserver.api import * from jumpserver.api import *
from jasset.models import AssetAlias from jperm.perm_api import get_group_user_perm
register = template.Library() register = template.Library()
@ -294,3 +294,13 @@ def get_disk_info(disk_info):
except Exception: except Exception:
disk_size = '' disk_size = ''
return 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

View File

@ -231,24 +231,20 @@ def user_list(request):
@require_role(role='user') @require_role(role='user')
def user_detail(request): def user_detail(request):
header_title, path1, path2 = '用户详情', '用户管理', '用户详情' header_title, path1, path2 = '用户详情', '用户管理', '用户详情'
# if request.session.get('role_id') == 0: if request.session.get('role_id') == 0:
# user_id = request.user.id user_id = request.user.id
# else: else:
# user_id = request.GET.get('id', '') user_id = request.GET.get('id', '')
# if request.session.get('role_id') == 1:
# user, dept = get_session_user_dept(request) user = get_object(User, id=user_id)
# if not validate(request, user=[user_id]): if not user:
# return HttpResponseRedirect('/')
user_id = request.GET.get('id', '')
if not user_id:
return HttpResponseRedirect('/juser/user_list/') return HttpResponseRedirect('/juser/user_list/')
user = User.objects.get(id=user_id)
# if user: user_perm_info = get_group_user_perm(user)
# pass role_assets = user_perm_info.get('role')
# asset_group_permed = user.get_asset_group() user_log_ten = Log.objects.filter(user=user.username).order_by('id')[0:10]
# logs_last = Log.objects.filter(user=user.name).order_by('-start_time')[0:10] user_log_last = Log.objects.filter(user=user.username).order_by('id')[0:50]
# logs_all = Log.objects.filter(user=user.name).order_by('-start_time') user_log_last_num = len(user_log_last)
# logs_num = len(logs_all)
return my_render('juser/user_detail.html', locals(), request) 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) return my_render('juser/user_edit.html', locals(), request)
# @require_role(role='admin')
def user_edit_adm(request):
pass
def profile(request): def profile(request):
a = request.user.id a = request.user.id
a = request.user.groups a = request.user.groups
@ -489,11 +480,3 @@ def down_key(request):
return response return response
return HttpResponse('No Key File. Contact Admin.') 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))

View File

@ -222,7 +222,7 @@
var url='/jperm/role/get/?id=' + $(this).attr('value'); var url='/jperm/role/get/?id=' + $(this).attr('value');
var href = $(this).attr('href'); var href = $(this).attr('href');
var new_url = '/jlog/web_terminal/?id=' + $(this).attr('value') + '&role='; 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({ $.ajax({
type: 'GET', type: 'GET',
url: url, url: url,
@ -247,6 +247,7 @@
$.each(dataArray, function(index, value){ $.each(dataArray, function(index, value){
aUrl += '<a onclick="windowOpen(this); return false" class="btn btn-xs btn-primary newa" href=' + new_url + value + ' value=' + hostname + '>' + value + '</a> ' aUrl += '<a onclick="windowOpen(this); return false" class="btn btn-xs btn-primary newa" href=' + new_url + value + ' value=' + hostname + '>' + value + '</a> '
}); });
console.log(aUrl);
layer.alert(aUrl, { layer.alert(aUrl, {
skin: 'layui-layer-molv', skin: 'layui-layer-molv',
title: '多个角色,请选择一个连接', title: '多个角色,请选择一个连接',

View File

@ -76,6 +76,36 @@
</table> </table>
</td> </td>
</tr> </tr>
<tr>
<td class="text-navy">授权主机数量</td>
<td>
{{ user_perm_info.asset.keys | length }}
</td>
</tr>
<tr>
<td class="text-navy">授权主机组</td>
<td>
<table class="table">
{% for group in user_perm_info.asset_group.keys%}
<tr>
<td><a href="/jasset/group_list/?id={{ group.id }}">{{ group.name }}</a></td>
</tr>
{% endfor %}
</table>
</td>
</tr>
<tr>
<td class="text-navy">授权规则</td>
<td>
<table class="table">
{% for rule in user_perm_info.rule%}
<tr>
<td><a href="/jperm/role/?id={{ rule.id }}">{{ rule.name }}</a></td>
</tr>
{% endfor %}
</table>
</td>
</tr>
</table> </table>
</div> </div>
</div> </div>
@ -94,10 +124,6 @@
<i class="fa fa-wrench"></i> <i class="fa fa-wrench"></i>
</a> </a>
<ul class="dropdown-menu dropdown-user"> <ul class="dropdown-menu dropdown-user">
<li><a href="#">Config option 1</a>
</li>
<li><a href="#">Config option 2</a>
</li>
</ul> </ul>
<a class="close-link"> <a class="close-link">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
@ -106,33 +132,35 @@
</div> </div>
<div class="ibox-content ibox-heading"> <div class="ibox-content ibox-heading">
<h3>用户的所有授权主机</h3> <h3>用户的所有授权主机</h3>
<small><i class="fa fa-map-marker"></i> 这里包含了用户所有的主机组和组下的主机.</small> <small><i class="fa fa-map-marker"></i> 这里包含了用户授权角色和角色下的主机.</small>
</div> </div>
<div class="ibox-content inspinia-timeline"> <div class="ibox-content inspinia-timeline">
{# {% for group in user|get_user_asset_group %}#} {% for role, assets in role_assets.items %}
{# <div class="timeline-item">#} <div class="timeline-item">
{# <div class="row">#} <div class="row">
{# <div class="col-xs-3 date">#} <div class="col-xs-3 date">
{# <i class="fa fa-repeat"></i>#} <i class="fa fa-info"></i>
{# <b><a href="/jperm/perm_list/?uid={{ user.id }}&agid={{ group.id }}">{{ group.name }}</a></b>#} <b>
{# <br>#} <a href="/jperm/role/&id={{ role.id }}">{{ role.name }}</a></b>
{# <small class="text-navy">共: {{ group | group_asset_list_count }}台</small>#} <br>
{# </div>#} <small class="text-navy">共: {{ assets.asset | length }}台</small>
{# <div class="col-xs-7 content no-top-border">#} </div>
{# <p class="m-b-xs"><strong>{{ group.comment }}</strong></p>#} <div class="col-xs-7 content no-top-border">
{# <p>#} <p class="m-b-xs">
{# {% for asset in group|group_asset_list %}#} <strong>{{ role.comment }}</strong></p>
{# {{ asset.ip }}<br>#} <p>
{# {% endfor %}#} {% for asset in assets.asset %}
{# </p>#} <a href="/jasset/asset_list/?id={{ asset.id }}">{{ asset.hostname }}</a><br>
{# <p></p>#} {% endfor %}
{# </div>#} </p>
{# </div>#} <p></p>
{# </div>#} </div>
{# {% endfor %}#} </div>
{# {% if not user|get_user_asset_group %}#} </div>
{# (无)#} {% endfor %}
{# {% endif %}#} {% ifequal '{{ asset.asset | length }}' 0 %}
(无)
{% endifequal %}
</div> </div>
</div> </div>
</div> </div>
@ -147,8 +175,9 @@
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<div id="last"> <div id="last">
<div class="feed-activity-list" > <div class="feed-activity-list" >
{% for log in logs_last %} {% for log in user_log_ten %}
<div class="feed-element"> <div class="feed-element">
<a href="profile.html" class="pull-left"> <a href="profile.html" class="pull-left">
<img alt="image" class="img-circle" src="/static/img/{{ session_role_id | to_avatar }}.png"> <img alt="image" class="img-circle" src="/static/img/{{ session_role_id | to_avatar }}.png">
@ -161,18 +190,18 @@
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
{% if not logs_last %} {% if not user_log_ten %}
(暂无) (暂无)
{% endif %} {% endif %}
</div> </div>
{% if logs_num > 10 %} {% if user_log_last_num > 10 %}
<button id="show" class="btn btn-primary btn-block m-t"><i class="fa fa-arrow-down"></i> Show All</button> <button id="show" class="btn btn-primary btn-block m-t"><i class="fa fa-arrow-down"></i> Show More</button>
{% endif %} {% endif %}
</div> </div>
<div id="all" style="display: none"> <div id="all" style="display: none">
<div class="feed-activity-list" > <div class="feed-activity-list" >
{% for log in logs_all %} {% for log in user_log_last %}
<div class="feed-element"> <div class="feed-element">
<a href="profile.html" class="pull-left"> <a href="profile.html" class="pull-left">
<img alt="image" class="img-circle" src="/static/img/{{ session_role_id | to_avatar }}.png"> <img alt="image" class="img-circle" src="/static/img/{{ session_role_id | to_avatar }}.png">

View File

@ -47,7 +47,8 @@
<th class="text-center">用户名</th> <th class="text-center">用户名</th>
<th class="text-center">姓名</th> <th class="text-center">姓名</th>
<th class="text-center">小组</th> <th class="text-center">小组</th>
<th class="text-center">角色</th> <th class="text-center">权限</th>
<th class="text-center">主机数量</th>
<th class="text-center">激活</th> <th class="text-center">激活</th>
<th class="text-center">下载密钥</th> <th class="text-center">下载密钥</th>
<th class="text-center">操作</th> <th class="text-center">操作</th>
@ -59,10 +60,11 @@
<td class="text-center"> <td class="text-center">
<input type="checkbox" name="checked" value="{{ user.id }}"> <input type="checkbox" name="checked" value="{{ user.id }}">
</td> </td>
<td class="text-center"> {{ user.username }} </td> <td class="text-center"><a href="../user_detail/?id={{ user.id }}">{{ user.username }}</a></td>
<td class="text-center"> {{ user.name }} </td> <td class="text-center"> {{ user.name }} </td>
<td class="text-center" title="{% for user_group in user.group.all %} {{ user_group.name }} {% endfor %}"> {{ user.group.all | groups2str }} </td> <td class="text-center" title="{% for user_group in user.group.all %} {{ user_group.name }} {% endfor %}"> {{ user.group.all | groups2str }} </td>
<td class="text-center"> {{ user.id | get_role }}</td> <td class="text-center"> {{ user.id | get_role }}</td>
<th class="text-center">{{ user.id | user_perm_asset_num }}</th>
<td class="text-center">{{ user.is_active | bool2str }}</td> <td class="text-center">{{ user.is_active | bool2str }}</td>
<td class="text-center"> <td class="text-center">
{% if user.username|key_exist %} {% if user.username|key_exist %}
@ -72,7 +74,6 @@
{% endif %} {% endif %}
</td> </td>
<td class="text-center"> <td class="text-center">
<a href="../user_detail/?id={{ user.id }}" class="btn btn-xs btn-primary">详情</a>
<a href="../user_edit/?id={{ user.id }}" class="btn btn-xs btn-info">编辑</a> <a href="../user_edit/?id={{ user.id }}" class="btn btn-xs btn-info">编辑</a>
<a value="{{ user.uuid }}" class="btn btn-xs btn-warning email">Email</a> <a value="{{ user.uuid }}" class="btn btn-xs btn-warning email">Email</a>
<a value="../user_del/?id={{ user.id }}" class="btn btn-xs btn-danger del {% if user.username == 'admin' %} disabled {% endif %}">删除</a> <a value="../user_del/?id={{ user.id }}" class="btn btn-xs btn-danger del {% if user.username == 'admin' %} disabled {% endif %}">删除</a>