修改用户详情

pull/6/head
guanghongwei 2015-04-01 22:54:10 +08:00
parent 2e5b22417d
commit a998de5973
10 changed files with 264 additions and 92 deletions

View File

@ -1,12 +1,18 @@
from juser.models import User from juser.models import User
from jasset.models import Asset from jasset.models import Asset
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')
user_total_num = User.objects.all().count() if role_id == 2:
user_active_num = User.objects.filter(is_active=True).count() user_total_num = User.objects.all().count()
user_active_num = User.objects.filter().count()
else:
user, dept = get_session_user_dept(request)
user_total_num = dept.user_set.all().count()
user_active_num = dept.user_set.filter(is_active=True).count()
host_total_num = Asset.objects.all().count() host_total_num = Asset.objects.all().count()
host_active_num = Asset.objects.filter(is_active=True).count() host_active_num = Asset.objects.filter(is_active=True).count()
request.session.set_expiry(3600) request.session.set_expiry(3600)

View File

@ -1,11 +1,9 @@
# coding: utf-8 # coding: utf-8
import re
import time import time
from django import template from django import template
from juser.models import User, UserGroup, DEPT from juser.models import User, UserGroup, DEPT
from jasset.models import BisGroup
from jumpserver.api import * from jumpserver.api import *
register = template.Library() register = template.Library()
@ -179,12 +177,19 @@ def to_name(user_id):
except: except:
return '闈炴硶鐢ㄦ埛' return '闈炴硶鐢ㄦ埛'
@register.filter(name='to_role_name') @register.filter(name='to_role_name')
def to_role_name(role_id): def to_role_name(role_id):
role_dict = {'0': '鏅氱敤鎴', '1': '閮ㄩ棬绠$悊鍛', '2': '瓒呯骇绠$悊鍛'} role_dict = {'0': '鏅氱敤鎴', '1': '閮ㄩ棬绠$悊鍛', '2': '瓒呯骇绠$悊鍛'}
return role_dict.get(str(role_id), '鏈煡') return role_dict.get(str(role_id), '鏈煡')
@register.filter(name='to_avatar') @register.filter(name='to_avatar')
def to_avatar(role_id='0'): def to_avatar(role_id='0'):
role_dict = {'0': 'user', '1': 'admin', '2': 'root'} role_dict = {'0': 'user', '1': 'admin', '2': 'root'}
return role_dict.get(str(role_id), 'user') return role_dict.get(str(role_id), 'user')
@register.filter(name='get_user_asset_group')
def get_user_asset_group(user):
return user_perm_group_api(user)

View File

@ -27,6 +27,6 @@ urlpatterns = patterns('juser.views',
(r'^user_del_ajax/$', 'user_del_ajax'), (r'^user_del_ajax/$', 'user_del_ajax'),
(r'^user_edit/$', view_splitter, {'su': user_edit, 'adm': user_edit_adm}), (r'^user_edit/$', view_splitter, {'su': user_edit, 'adm': user_edit_adm}),
(r'^profile/$', 'profile'), (r'^profile/$', 'profile'),
(r'^chg_pass/$', 'chg_pass'), (r'^chg_info/$', 'chg_info'),
(r'^chg_role/$', 'chg_role'), (r'^chg_role/$', 'chg_role'),
) )

View File

@ -233,10 +233,13 @@ def dept_list_adm(request):
return render_to_response('juser/dept_list.html', locals(), context_instance=RequestContext(request)) return render_to_response('juser/dept_list.html', locals(), context_instance=RequestContext(request))
@require_admin
def chg_role(request): def chg_role(request):
request.session['role_id'] = 0 role = {'SU': 2, 'DA': 1, 'CU': 0}
user, dept = get_session_user_dept(request)
if request.session['role_id'] > 0:
request.session['role_id'] = 0
elif request.session['role_id'] == 0:
request.session['role_id'] = role.get(user.role, 0)
return HttpResponseRedirect('/') return HttpResponseRedirect('/')
@ -953,8 +956,36 @@ def profile(request):
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))
def chg_pass(request): def chg_info(request):
header_title, path1, path2 = '淇敼淇℃伅 | Edit Info', '鐢ㄦ埛绠$悊', '淇敼涓汉淇℃伅' header_title, path1, path2 = '淇敼淇℃伅 | Edit Info', '鐢ㄦ埛绠$悊', '淇敼涓汉淇℃伅'
user_id = request.session.get('user_id')
user_set = User.objects.filter(id=user_id)
error = ''
if user_set:
user = user_set[0]
else:
return HttpResponseRedirect('/')
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request)) if request.method == 'POST':
name = request.POST.get('name', '')
password = request.POST.get('password', '')
ssh_key_pwd = request.POST.get('ssh_key_pwd', '')
email = request.POST.get('email', '')
if '' in [name, password, ssh_key_pwd, email]:
error = '涓嶈兘涓虹┖'
if len(password) < 6 or len(ssh_key_pwd) < 6:
error = '瀵嗙爜椤诲ぇ浜6浣'
if not error:
if password != user.password:
password = md5_crypt(password)
if ssh_key_pwd != user.ssh_key_pwd:
ssh_key_pwd = md5_crypt(ssh_key_pwd)
user_set.update(name=name, password=password, ssh_key_pwd=ssh_key_pwd, email=email)
msg = '淇敼鎴愬姛'
return render_to_response('juser/chg_info.html', locals(), context_instance=RequestContext(request))

View File

@ -1,6 +1,6 @@
<div class="footer fixed"> <div class="footer fixed">
<div class="pull-right"> <div class="pull-right">
Version <strong>1.2.0</strong> GPL. Version <strong>2.0.0</strong> GPL.
</div> </div>
<div> <div>
<strong>Copyright</strong> Jumpserver.org Organization &copy; 2014-2015 <strong>Copyright</strong> Jumpserver.org Organization &copy; 2014-2015

View File

@ -66,7 +66,7 @@
<tr class="gradeX"> <tr class="gradeX">
<td class="text-center"> {{ group.name }} </td> <td class="text-center"> {{ group.name }} </td>
<td class="text-center"> {{ group.dept.name }} </td> <td class="text-center"> {{ group.dept.name }} </td>
<td class="text-center"><a href="/juser/user_list/?did={{ group.id }}">{{ group.id | member_count }} </a> </td> <td class="text-center"><a href="/juser/user_list/?gid={{ group.id }}">{{ group.id | member_count }} </a> </td>
<td class="text-center"> {{ group.id | ugrp_perm_agrp_count }} </td> <td class="text-center"> {{ group.id | ugrp_perm_agrp_count }} </td>
<td class="text-center"> {{ group.id | ugrp_perm_asset_count }} </td> <td class="text-center"> {{ group.id | ugrp_perm_asset_count }} </td>
<td class="text-center"> {{ group.id | ugrp_perm_asset_count }} </td> <td class="text-center"> {{ group.id | ugrp_perm_asset_count }} </td>
@ -116,28 +116,7 @@
}); });
{# $(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)#}
{# }#}
{# })#}
{##}
{# })#}
{# })#}
</script> </script>
{% endblock %} {% endblock %}

View File

@ -0,0 +1,132 @@
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-lg-10">
<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">
<form method="post" id="userForm" class="form-horizontal" action="">
{% if error %}
<div class="alert alert-warning text-center">{{ error }}</div>
{% endif %}
{% if msg %}
<div class="alert alert-success text-center">{{ msg }}</div>
{% endif %}
<div class="form-group">
<div class="col-sm-8">
<input id="user_id" name="user_id" type="text" value="{{ user.id }}" style="display: none">
</div>
</div>
<div class="form-group">
<label for="name" class="col-sm-2 control-label">濮撳悕<span class="red-fonts">*</span></label>
<div class="col-sm-8">
<input id="name" name="name" placeholder="Name" type="text" class="form-control" value="{{ user.name }}">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="password" class="col-sm-2 control-label">瀵嗙爜<span class="red-fonts">*</span></label>
<div class="col-sm-8">
<input id="password" name="password" placeholder="Password" type="password" class="form-control" value="{{ user.password }}">
<span class="help-block m-b-none">
鐧婚檰web鐨勫瘑鐮
</span>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="ssh_key_pwd" class="col-sm-2 control-label">瀵嗛挜瀵嗙爜<span class="red-fonts">*</span></label>
<div class="col-sm-8">
<input id="ssh_key_pwd" name="ssh_key_pwd" placeholder="SSH Key Password" type="password" class="form-control" value="{{ user.ssh_key_pwd }}">
<span class="help-block m-b-none">
鐧婚檰 Jumpserver 浣跨敤鐨凷SH瀵嗛挜鐨勫瘑鐮
</span>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label for="email" class="col-sm-2 control-label">Email<span class="red-fonts">*</span></label>
<div class="col-sm-8">
<input id="email" name="email" type="email" placeholder="Email" class="form-control" value="{{ user.email }}" >
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-4 col-sm-offset-2">
<button class="btn btn-white" type="submit">鍙栨秷</button>
<button id="submit_button" class="btn btn-primary" type="submit">纭淇敼</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$('#userForm').validator({
timely: 2,
theme: "yellow_right_effect",
fields: {
"password": {
rule: "required;length[6~50]",
tip: "杈撳叆瀵嗙爜",
ok: "",
msg: {required: "蹇呴』濉啓!"}
},
"ssh_key_pwd": {
rule: "required;length[6~50]",
tip: "ssh绉侀挜瀵嗙爜",
ok: "",
msg: {required: "蹇呴』濉啓"}
},
"name": {
rule: "required",
tip: "濮撳悕",
ok: "",
msg: {required: "蹇呴』濉啓"}
},
"email": {
rule: "required",
tip: "Email",
ok: "",
msg: {required: "蹇呴』濉啓"}
},
},
valid: function(form) {
form.submit();
}
});
</script>
{% endblock %}

View File

@ -20,65 +20,61 @@
<table class="table table-striped table-bordered table-hover " id="editable" > <table class="table table-striped table-bordered table-hover " id="editable" >
<thead> <thead>
<tr> <tr>
<th class="text-center">鐢ㄦ埛</th> <td class="text-center" width="120">ID</td>
<th class="text-center">璇︽儏</th> <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> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="gradeX"> <tr class="gradeX">
<td class="text-center">ID</td>
<td class="text-center">{{ user.id }}</td> <td class="text-center">{{ user.id }}</td>
</tr>
<tr class="gradeX">
<td class="text-center">username</td>
<td class="text-center">{{ user.username }}</td> <td class="text-center">{{ user.username }}</td>
</tr>
<tr class="gradeX">
<td class="text-center">濮撳悕</td>
<td class="text-center">{{ user.name }}</td> <td class="text-center">{{ user.name }}</td>
</tr> <td class="text-center">{{ user.id | get_role }}</td>
<tr class="gradeX"> <td class="text-center">{{ user.dept.name }}</td>
<td class="text-center">瑙掕壊</td>
<td class="text-center">{{ user.id }}</td>
</tr>
<tr class="gradeX">
<td class="text-center">閮ㄩ棬</td>
<td class="text-center">
{{ user.dept.name }}
</td>
</tr>
<tr class="gradeX">
<td class="text-center">灏忕粍</td>
<td class="text-center">
{% for group in user.user_group.all %}
{{ group.name }}
{% endfor %}
</td>
</tr>
<tr class="gradeX">
<td class="text-center">Email</td>
<td class="text-center">{{ user.email }}</td> <td class="text-center">{{ user.email }}</td>
</tr>
<tr class="gradeX">
<td class="text-center">婵娲</td>
<td class="text-center">{{ user.is_active|bool2str }}</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>
<tr class="gradeX"> <tr>
<td class="text-center">娣诲姞鏃堕棿</td> <td class="text-center">娣诲姞鏃ユ湡锛 </td>
<td class="text-center">{{ user.date_joined }}</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>
<tr class="gradeX"> <tr>
<td class="text-center">鏈鍚庣櫥褰</td> <td colspan="1" class="text-center">鐢ㄦ埛缁勶細</td>
<td class="text-center">{{ user.last_login }}</td> <td colspan="6" class="text-center">
</tr> {% for group in user.group.all %}
<tr class="gradeX"> <b>{{ group.name }}</b>
<td class="text-center">鎺堟潈涓绘満缁</td>
<td class="text-center">
{% for asset_group in asset_group_permed %}
{{ asset_group.name }}
{% endfor %} {% endfor %}
</td> </td>
</tr> </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> </table>
</div> </div>
</div> </div>

View File

@ -72,7 +72,7 @@
<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"> <td class="text-center">
<a title="[ {{ user.name }} ] 璇︽儏" href="../user_detail/?id={{ user.id }}" class="iframe btn btn-xs btn-primary">璇︽儏</a> <a title="[ {{ user.name }} ] 璇︽儏" value="../user_detail/?id={{ user.id }}" class="iframe 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>
@ -80,7 +80,6 @@
<a href="../user_edit/?id={{ user.id }}" class="btn btn-xs btn-info {% if user.id|user_readonly %} disabled {% endif %}">缂栬緫</a> <a href="../user_edit/?id={{ user.id }}" class="btn btn-xs btn-info {% if user.id|user_readonly %} disabled {% endif %}">缂栬緫</a>
<a href="../user_del/?id={{ user.id }}" class="btn btn-xs btn-danger {% if user.id|user_readonly %} disabled {% endif %}">鍒犻櫎</a> <a href="../user_del/?id={{ user.id }}" class="btn btn-xs btn-danger {% if user.id|user_readonly %} disabled {% endif %}">鍒犻櫎</a>
{% endifequal %} {% endifequal %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
@ -102,8 +101,21 @@
<script> <script>
$(document).ready(function(){ $(document).ready(function(){
$(".iframe").colorbox({iframe:true, width:"70%", height:"70%"}); $(".iframe").on('click', function() {
var check_array = [] var url = $(this).attr("value");
$.layer({
type: 2,
title: '鐢ㄦ埛璇︽儏',
maxmin: true,
shift: 'top',
border: [2, 0.3, '#1AB394'],
shade: [0.5, '#000000'],
shadeClose: true,
area: ['800px', '600px'],
iframe: {src: url}
})
});
var check_array = [];
$('#del_btn').click(function(){ $('#del_btn').click(function(){
if (confirm("纭畾鍒犻櫎")) { if (confirm("纭畾鍒犻櫎")) {
$(".gradeX input:checked").each(function() {check_array.push($(this).attr("value")) }) $(".gradeX input:checked").each(function() {check_array.push($(this).attr("value")) })

View File

@ -8,14 +8,9 @@
<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 href="/juser/profile/">涓汉淇℃伅</a></li> <li><a value="/juser/user_detail/?id={{ session_user_id }}" class="iframe">涓汉淇℃伅</a></li>
<li><a href="/juser/chg_pass/">淇敼瀵嗙爜</a></li> <li><a href="/juser/chg_info/">淇敼淇℃伅</a></li>
{% ifequal session_role_id 2 %} <li><a href="/juser/chg_role/">鍒囨崲瑙掕壊</a></li>
<li><a href="/juser/chg_role/">鍒囨崲鏅氳鑹</a></li>
{% endifequal %}
{% ifequal session_role_id 1 %}
<li><a href="/juser/chg_role/">鍒囨崲鏅氳鑹</a></li>
{% endifequal %}
<li class="divider"></li> <li class="divider"></li>
<li><a href="/logout/">娉ㄩ攢</a></li> <li><a href="/logout/">娉ㄩ攢</a></li>
@ -25,4 +20,20 @@
JS+ JS+
</div> </div>
</li> </li>
<script>
$(".iframe").on('click', function(){
var url= $(this).attr("value");
$.layer({
type: 2,
title: '涓汉淇℃伅',
maxmin: true,
shift: 'top',
border: [2, 0.3, '#1AB394'],
shade: [0.5, '#000000'],
shadeClose: true,
area : ['800px' , '600px'],
iframe: {src: url}
});
});
</script>