Commit bd0fd90e authored by guanghongwei's avatar guanghongwei

ûͨû

parent 7e532283
...@@ -127,13 +127,13 @@ def test_add_log(): ...@@ -127,13 +127,13 @@ def test_add_log():
if __name__ == '__main__': if __name__ == '__main__':
install() #install()
test_add_dept() #test_add_dept()
test_add_group() #test_add_group()
test_add_user() #test_add_user()
test_add_idc() #test_add_idc()
test_add_asset_group() #test_add_asset_group()
test_add_asset() #test_add_asset()
test_add_log() test_add_log()
......
...@@ -10,6 +10,7 @@ from binascii import b2a_hex, a2b_hex ...@@ -10,6 +10,7 @@ from binascii import b2a_hex, a2b_hex
import ldap import ldap
from ldap import modlist from ldap import modlist
import hashlib import hashlib
import datetime
from django.core.paginator import Paginator, EmptyPage, InvalidPage from django.core.paginator import Paginator, EmptyPage, InvalidPage
from django.http import HttpResponse, Http404 from django.http import HttpResponse, Http404
from juser.models import User, UserGroup from juser.models import User, UserGroup
......
...@@ -2,6 +2,7 @@ from juser.models import User ...@@ -2,6 +2,7 @@ from juser.models import User
from jasset.models import Asset from jasset.models import Asset
from jumpserver.api import * from jumpserver.api import *
def name_proc(request): def name_proc(request):
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
role_id = request.session.get('role_id') role_id = request.session.get('role_id')
......
...@@ -108,6 +108,7 @@ TEMPLATE_DIRS = ( ...@@ -108,6 +108,7 @@ TEMPLATE_DIRS = (
STATICFILES_DIRS = ( STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"), os.path.join(BASE_DIR, "static"),
os.path.join(BASE_DIR, "keys"),
) )
# Internationalization # Internationalization
# https://docs.djangoproject.com/en/1.7/topics/i18n/ # https://docs.djangoproject.com/en/1.7/topics/i18n/
......
...@@ -56,7 +56,7 @@ def groups_str2(group_list): ...@@ -56,7 +56,7 @@ def groups_str2(group_list):
@register.filter(name='group_str2_all') @register.filter(name='group_str2_all')
def groups_str2(group_list): def group_str2_all(group_list):
group_lis = [] group_lis = []
for i in group_list: for i in group_list:
if str(i) != 'ALL': if str(i) != 'ALL':
...@@ -106,6 +106,12 @@ def member_count(group_id): ...@@ -106,6 +106,12 @@ def member_count(group_id):
return group.user_set.count() return group.user_set.count()
@register.filter(name='group_user_count')
def group_user_count(group_id):
group = UserGroup.objects.get(id=group_id)
return group.user_set.count()
@register.filter(name='dept_user_num') @register.filter(name='dept_user_num')
def dept_user_num(dept_id): def dept_user_num(dept_id):
dept = DEPT.objects.filter(id=dept_id) dept = DEPT.objects.filter(id=dept_id)
...@@ -217,3 +223,31 @@ def to_avatar(role_id='0'): ...@@ -217,3 +223,31 @@ def to_avatar(role_id='0'):
@register.filter(name='get_user_asset_group') @register.filter(name='get_user_asset_group')
def get_user_asset_group(user): def get_user_asset_group(user):
return user_perm_group_api(user) return user_perm_group_api(user)
@register.filter(name='group_asset_list')
def group_asset_list(group):
return group.asset_set.all()
@register.filter(name='group_asset_list_count')
def group_asset_list_count(group):
return group.asset_set.all().count()
@register.filter(name='time_delta')
def time_delta(time_before):
delta = datetime.datetime.now() - time_before
days = delta.days
if days:
return "%s 天前" % days
else:
hours = delta.seconds/3600
if hours:
return "%s 小时前" % hours
else:
mins = delta.seconds/60
if mins:
return '%s 分钟前' % mins
else:
return '%s 秒前' % delta.seconds
...@@ -42,8 +42,15 @@ def get_data(data, items, option): ...@@ -42,8 +42,15 @@ def get_data(data, items, option):
return dic return dic
@require_login
def index_cu(request):
return render_to_response('index_cu.html', locals(), context_instance=RequestContext(request))
@require_login @require_login
def index(request): def index(request):
if request.session.get('role_id') == 0:
return index_cu(request)
users = User.objects.all() users = User.objects.all()
hosts = Asset.objects.all() hosts = Asset.objects.all()
online_host = Log.objects.filter(is_finished=0) online_host = Log.objects.filter(is_finished=0)
......
...@@ -109,7 +109,7 @@ def db_del_user(username): ...@@ -109,7 +109,7 @@ def db_del_user(username):
def gen_ssh_key(username, password=None, length=2048): def gen_ssh_key(username, password=None, length=2048):
private_key_dir = os.path.join(BASE_DIR, 'keys/jumpserver/') private_key_dir = os.path.join(BASE_DIR, 'keys/jumpserver/')
private_key_file = os.path.join(private_key_dir, username) private_key_file = os.path.join(private_key_dir, username+".pem")
public_key_dir = '/home/%s/.ssh/' % username public_key_dir = '/home/%s/.ssh/' % username
public_key_file = os.path.join(public_key_dir, 'authorized_keys') public_key_file = os.path.join(public_key_dir, 'authorized_keys')
is_dir(private_key_dir) is_dir(private_key_dir)
...@@ -775,18 +775,26 @@ def user_list_adm(request): ...@@ -775,18 +775,26 @@ def user_list_adm(request):
return render_to_response('juser/user_list.html', locals(), context_instance=RequestContext(request)) return render_to_response('juser/user_list.html', locals(), context_instance=RequestContext(request))
@require_admin @require_login
def user_detail(request): def user_detail(request):
header_title, path1, path2 = '查看用户', '用户管理', '用户详情'
if request.session.get('role_id') == 0:
user_id = request.session.get('user_id')
else:
user_id = request.GET.get('id', '') user_id = request.GET.get('id', '')
if not user_id: if request.session.get('role_id') == 1:
return HttpResponseRedirect('/juser/user_list/') user, dept = get_session_user_dept(request)
if request.session.get('role_id', '') == '1':
if not validate(request, user=[user_id]): if not validate(request, user=[user_id]):
return HttpResponseRedirect('/')
if not user_id:
return HttpResponseRedirect('/juser/user_list/') return HttpResponseRedirect('/juser/user_list/')
user = User.objects.filter(id=user_id) user = User.objects.filter(id=user_id)
if user: if user:
user = user[0] user = user[0]
asset_group_permed = user_perm_group_api(user) asset_group_permed = user_perm_group_api(user)
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')
return render_to_response('juser/user_detail.html', locals(), context_instance=RequestContext(request)) return render_to_response('juser/user_detail.html', locals(), context_instance=RequestContext(request))
...@@ -953,11 +961,11 @@ def profile(request): ...@@ -953,11 +961,11 @@ def profile(request):
if not user_id: if not user_id:
return HttpResponseRedirect('/') return HttpResponseRedirect('/')
user = User.objects.get(id=user_id) user = User.objects.get(id=user_id)
return render_to_response('juser/user_detail.html', locals(), context_instance=RequestContext(request)) return render_to_response('juser/profile.html', locals(), context_instance=RequestContext(request))
def chg_info(request): def chg_info(request):
header_title, path1, path2 = '修改信息 | Edit Info', '用户管理', '修改个人信息' header_title, path1, path2 = '修改信息', '用户管理', '修改个人信息'
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
user_set = User.objects.filter(id=user_id) user_set = User.objects.filter(id=user_id)
error = '' error = ''
......
{% extends 'base.html' %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div class="wrapper wrapper-content">
<div class="row">
<div class="col-lg-8">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5> 使用说明 </h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#">未启用 1</a>
</li>
<li><a href="#">未启用 2</a>
</li>
</ul>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
helo
</div>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<div class="col-lg-6"> <div class="col-lg-6">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title"> <div class="ibox-title">
<h5>授权用户 <small> User.</small></h5> <h5>用户详情</h5>
<div class="ibox-tools"> <div class="ibox-tools">
<a class="collapse-link"> <a class="collapse-link">
<i class="fa fa-chevron-up"></i> <i class="fa fa-chevron-up"></i>
......
{% load mytags %}
<html>
<head>
{% include 'link_css.html' %}
<style type="text/css">
body
{
background: #FFFFFF;
}
</style>
</head>
<body>
<div class="row">
<div class="contact-box">
<h2 class="text-center">{{ user.name }} 用户详情</h2>
<div class="ibox-content">
<table class="table table-striped table-bordered table-hover " id="editable" >
<thead>
<tr>
<td class="text-center" width="120">ID</td>
<td class="text-center">用户名</td>
<td class="text-center">姓名</td>
<td class="text-center">角色</td>
<td class="text-center">部门</td>
<td class="text-center">Email</td>
<td class="text-center">激活</td>
{# <td class="text-center">添加时间</td>#}
{# <td class="text-center">最后登录</td>#}
</tr>
</thead>
<tbody>
<tr class="gradeX">
<td class="text-center">{{ user.id }}</td>
<td class="text-center">{{ user.username }}</td>
<td class="text-center">{{ user.name }}</td>
<td class="text-center">{{ user.id | get_role }}</td>
<td class="text-center">{{ user.dept.name }}</td>
<td class="text-center">{{ user.email }}</td>
<td class="text-center">{{ user.is_active|bool2str }}</td>
{# <td class="text-center">{{ user.date_joined }}</td>#}
{# <td class="text-center">{{ user.last_login }}</td>#}
</tr>
<tr>
<td class="text-center">添加日期: </td>
<td colspan="2" class="text-center">{{ user.date_joined }}</td>
<td class="text-center">最后登录: </td>
<td colspan="3" class="text-center">{{ user.last_login }}</td>
</tr>
<tr>
<td colspan="1" class="text-center">用户组:</td>
<td colspan="6" class="text-center">
{% for group in user.group.all %}
<b>{{ group.name }}</b>
{% endfor %}
</td>
</tr>
{# <tr>#}
{# <td colspan="1" class="text-center">授权主机组:</td>#}
{# <td colspan="6" class="text-center">#}
{# {% for group in user|get_user_asset_group %}#}
{# <b>{{ group.name }}</b>#}
{# {% endfor %}#}
{# </td>#}
{# </tr>#}
{# #}
{# <tr class="gradeX">#}
{# <td class="text-center">授权主机组</td>#}
{# <td class="text-center">#}
{# {% for asset_group in asset_group_permed %}#}
{# {{ asset_group.name }}#}
{# {% endfor %}#}
{# </td>#}
{# </tr>#}
</table>
</div>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
<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>
</tr> </tr>
</thead> </thead>
...@@ -71,8 +72,9 @@ ...@@ -71,8 +72,9 @@
<td class="text-center" title="{% for user_group in user.group.all %} {{ user_group.name }} {% endfor %}"> {{ user.group.all | group_str2 }} </td> <td class="text-center" title="{% for user_group in user.group.all %} {{ user_group.name }} {% endfor %}"> {{ user.group.all | group_str2 }} </td>
<td class="text-center"> {{ user.id | get_role }}</td> <td class="text-center"> {{ user.id | get_role }}</td>
<td class="text-center">{{ user.is_active|bool2str }}</td> <td class="text-center">{{ user.is_active|bool2str }}</td>
<td class="text-center"><a href="/static/jumpserver/{{ user.username }}.pem">下载</a></td>
<td class="text-center"> <td class="text-center">
<a title="[ {{ user.name }} ] 详情" value="../user_detail/?id={{ user.id }}" class="iframe btn btn-xs btn-primary">详情</a> <a href="../user_detail/?id={{ user.id }}" class="btn btn-xs btn-primary">详情</a>
{% ifequal session_role_id 2 %} {% ifequal session_role_id 2 %}
<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 href="../user_del/?id={{ user.id }}" class="btn btn-xs btn-danger">删除</a> <a href="../user_del/?id={{ user.id }}" class="btn btn-xs btn-danger">删除</a>
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<li class="dept_add"><a href="/juser/dept_add/">添加部门</a></li> <li class="dept_add"><a href="/juser/dept_add/">添加部门</a></li>
<li class="group_list group_edit"><a href="/juser/group_list/">查看小组</a></li> <li class="group_list group_edit"><a href="/juser/group_list/">查看小组</a></li>
<li class="group_add"><a href="/juser/group_add/">添加小组</a></li> <li class="group_add"><a href="/juser/group_add/">添加小组</a></li>
<li class="user_list user_edit"><a href="/juser/user_list/">查看用户<span class="label {% ifequal user_active_num user_total_num %}label-primary {% else %}label-warning {% endifequal %}pull-right">{{ user_active_num }}/{{ user_total_num }}</span></a></li> <li class="user_list user_edit user_detail"><a href="/juser/user_list/">查看用户<span class="label {% ifequal user_active_num user_total_num %}label-primary {% else %}label-warning {% endifequal %}pull-right">{{ user_active_num }}/{{ user_total_num }}</span></a></li>
<li class="user_add"><a href="/juser/user_add/">添加用户</a></li> <li class="user_add"><a href="/juser/user_add/">添加用户</a></li>
</ul> </ul>
</li> </li>
...@@ -137,7 +137,7 @@ ...@@ -137,7 +137,7 @@
<a href="/"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span><span class="label label-info pull-right"></span></a> <a href="/"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span><span class="label label-info pull-right"></span></a>
</li> </li>
<li> <li>
<a href="/"><i class="fa fa-rebel"></i> <span class="nav-label">个人信息</span><span class="label label-info pull-right"></span></a> <a href="/juser/user_detail/?id={{ session_user_id }}"><i class="fa fa-rebel"></i> <span class="nav-label">个人信息</span><span class="label label-info pull-right"></span></a>
</li> </li>
<li id="jasset"> <li id="jasset">
<a href="/jasset/host_list/"><i class="fa fa-cube"></i> <span class="nav-label">查看主机</span><span class="label label-info pull-right"></span></a> <a href="/jasset/host_list/"><i class="fa fa-cube"></i> <span class="nav-label">查看主机</span><span class="label label-info pull-right"></span></a>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<span class="clear"> <span class="block m-t-xs"> <strong class="font-bold">{{ session_user_id | to_name}}</strong> <span class="clear"> <span class="block m-t-xs"> <strong class="font-bold">{{ session_user_id | to_name}}</strong>
</span> <span class="text-muted text-xs block">{{ session_role_id | to_role_name }} <b class="caret"></b></span> </span> </a> </span> <span class="text-muted text-xs block">{{ session_role_id | to_role_name }} <b class="caret"></b></span> </span> </a>
<ul class="dropdown-menu animated fadeInRight m-t-xs"> <ul class="dropdown-menu animated fadeInRight m-t-xs">
<li><a value="/juser/user_detail/?id={{ session_user_id }}" class="iframe">个人信息</a></li> <li><a value="/juser/profile/?id={{ session_user_id }}" class="iframe">个人信息</a></li>
<li><a href="/juser/chg_info/">修改信息</a></li> <li><a href="/juser/chg_info/">修改信息</a></li>
<li><a href="/juser/chg_role/">切换角色</a></li> <li><a href="/juser/chg_role/">切换角色</a></li>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment