菜单active

pull/6/head
halcyon 10 years ago
commit 449bde4b03

@ -38,3 +38,11 @@ def groups_str(username):
@register.filter(name='get_item')
def get_item(dictionary, key):
return dictionary.get(key)
@register.filter(name='bool2str')
def bool2str(value):
if value:
return u''
else:
return u''

@ -10,4 +10,7 @@ urlpatterns = patterns('juser.views',
(r'^user_list/$', 'user_list'),
(r'^group_add/$', 'group_add'),
(r'^group_list/$', 'group_list'),
(r'^user_detail/$', 'user_detail'),
(r'^user_del/$', 'user_del'),
(r'^user_edit/$', 'user_edit'),
)

@ -11,6 +11,7 @@ import ldap
from ldap import modlist
from Crypto.PublicKey import RSA
import crypt
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.core.exceptions import ObjectDoesNotExist
@ -19,7 +20,7 @@ from juser.models import UserGroup, User
from connect import PyCrypt, KEY
from connect import BASE_DIR
from connect import CONF
from django.core.paginator import Paginator, EmptyPage, InvalidPage
CRYPTOR = PyCrypt(KEY)
LDAP_ENABLE = CONF.getint('ldap', 'ldap_enable')
@ -107,6 +108,7 @@ class LDAPMgmt():
except ldap.LDAPError, e:
print e
def gen_sha512(salt, password):
return crypt.crypt(password, '$6$%s$' % salt)
@ -152,14 +154,121 @@ def group_list(request):
def user_list(request):
user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'}
header_title, path1, path2 = '查看用户 | Add User', 'juser', 'user_list'
users = User.objects.all()
header_title, path1, path2 = '查看用户 | Show User', 'juser', 'user_list'
users = contact_list = User.objects.all().order_by('id')
p = paginator = Paginator(contact_list, 10)
try:
page = int(request.GET.get('page', '1'))
except ValueError:
page = 1
try:
contacts = paginator.page(page)
except (EmptyPage, InvalidPage):
contacts = paginator.page(paginator.num_pages)
return render_to_response('juser/user_list.html', locals())
def user_detail(request):
username = request.GET.get('username', None)
if not username:
return HttpResponseRedirect('/')
user = User.objects.get(username=username)
return render_to_response('juser/user_detail.html', locals())
def user_del(request):
username = request.GET.get('username', None)
if not username:
return HttpResponseRedirect('/')
user = User.objects.get(username=username)
user.delete()
return HttpResponseRedirect('/juser/user_list/', locals())
def user_edit(request):
header_title, path1, path2 = '编辑用户 | Edit User', 'juser', 'user_edit'
hidden = "hidden"
if request.method == 'GET':
username = request.GET.get('username', None)
if not username:
return HttpResponseRedirect('/')
user = User.objects.get(username=username)
username = user.username
password = user.password
ssh_key_pwd1 = user.ssh_key_pwd1
name = user.name
all_group = UserGroup.objects.all()
groups = user.user_group.all()
groups_str = ' '.join([str(group.id) for group in groups])
user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'}
role_post = user.role
ssh_pwd = user.ssh_pwd
email = user.email
else:
username = request.POST.get('username', None)
password = request.POST.get('password', None)
name = request.POST.get('name', None)
email = request.POST.get('email', '')
groups = request.POST.getlist('groups', None)
groups_str = ' '.join(groups)
role_post = request.POST.get('role', None)
ssh_pwd = request.POST.get('ssh_pwd', None)
ssh_key_pwd1 = request.POST.get('ssh_key_pwd1', None)
is_active = request.POST.get('is_active', '1')
ldap_pwd = gen_rand_pwd(16)
all_group = UserGroup.objects.all()
user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'}
if username:
user = User.objects.get(username=username)
else:
return HttpResponseRedirect('/')
if password != user.password:
password = md5_crypt(password)
if ssh_pwd != user.ssh_pwd:
ssh_pwd = CRYPTOR.encrypt(ssh_pwd)
if ssh_key_pwd1 != user.ssh_key_pwd1:
ssh_key_pwd1 = CRYPTOR.encrypt(ssh_key_pwd1)
db_update_user(username=username,
password=password,
name=name,
email=email,
groups=groups,
role=role_post,
ssh_pwd=ssh_pwd,
ssh_key_pwd1=ssh_key_pwd1)
msg = u'修改用户成功'
return HttpResponseRedirect('/juser/user_list/')
return render_to_response('juser/user_add.html', locals())
def db_add_user(**kwargs):
groups_post = kwargs.pop('groups')
user = User(**kwargs)
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
def db_update_user(**kwargs):
groups_post = kwargs.pop('groups')
username = kwargs.get('username')
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)
@ -249,7 +358,7 @@ def ldap_del_user(username):
group_dn = "cn=%s,ou=Group,%s" % (username, LDAP_BASE_DN)
sudo_dn = 'cn=%s,ou=Sudoers,%s' % (username, LDAP_BASE_DN)
ldap_conn = LDAPMgmt()
ldap_conn = LDAPMgmt(LDAP_HOST_URL, LDAP_BASE_DN, LDAP_ROOT_DN, LDAP_ROOT_PW)
ldap_conn.delete(user_dn)
ldap_conn.delete(group_dn)
ldap_conn.delete(sudo_dn)

@ -14,7 +14,7 @@
</head>
<body class="skin-1">
<body>
<div id="wrapper">
{% include 'nav.html' %}

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

@ -74,7 +74,6 @@
form.submit();
}
});
</script>
{% endblock %}

@ -35,7 +35,7 @@
{% if msg %}
<div class="alert alert-success text-center">{{ msg }}</div>
{% endif %}
<div class="form-group">
<div class="form-group {{ hidden }}">
<label for="username" class="col-sm-2 control-label">用户名<span class="red-fonts">*</span></label>
<div class="col-sm-8">
<input id="username" name="username" placeholder="Username" type="text" class="form-control" value={{ username }}>

@ -0,0 +1,71 @@
{% 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">
<div class="">
<a target="_blank" href="/juser/user_add/" class="btn btn-sm btn-primary "> 添加 </a>
</div>
<table class="table table-striped table-bordered table-hover " id="editable" >
<thead>
<tr>
<th class="text-center">用户</th>
<th class="text-center">详情</th>
</tr>
</thead>
<tbody>
<tr class="gradeX">
<td class="text-center">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>
</tr>
<tr class="gradeX">
<td class="text-center">姓名</td>
<td class="text-center">{{ user.name }}</td>
</tr>
<tr class="gradeX">
<td class="text-center">角色</td>
<td class="text-center">{{ user.id|get_role }}</td>
</tr>
<tr class="gradeX">
<td class="text-center">属组</td>
<td class="text-center">{{ user.username|groups_str }}</td>
</tr>
<tr class="gradeX">
<td class="text-center">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>
</tr>
<tr class="gradeX">
<td class="text-center">添加时间</td>
<td class="text-center">{{ user.joined }}</td>
</tr>
<tr class="gradeX">
<td class="text-center">最后登录</td>
<td class="text-center">{{ user.last_login }}</td>
</tr>
</table>
</div>
</div>
</body>
</html>

@ -1,14 +1,14 @@
{% 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>用户信息 <small> show user info.</small></h5>
<h5> 查看用户 <small> show user info.</small> </h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
@ -27,54 +27,94 @@
</a>
</div>
</div>
<div class="ibox-content" style="display: block;">
<form method="post" action="">
<table class="table table-hover">
<div class="ibox-content">
<div class="">
<a target="_blank" href="/juser/user_add/" class="btn btn-sm btn-primary "> 添加 </a>
</div>
<table class="table table-striped table-bordered table-hover " id="editable" >
<thead>
<tr>
<th>
<div class="checkbox i-checks">
<input onclick="selectAll()" type="checkbox" name="select_all" style="select_all" id="select_all">
</div>
</th>
<th>ID</th>
<th>用户名</th>
<th>姓名</th>
<th>属组</th>
<th>角色</th>
<th>Email</th>
<th>激活</th>
<th class="text-center"><input type="checkbox" class="i-checks" name=""></th>
<th class="text-center">ID</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">Email</th>
<th class="text-center">激活</th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>
<div class="checkbox i-checks">
<input type="checkbox" value="{{ user.id }}" name="selected">
</div>
{% for user in contacts.object_list %}
<tr class="gradeX">
<td class="text-center"><input type="checkbox" class="i-checks" name=""></td>
<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.username|groups_str }}</td>
<td class="text-center">{{ user.id|get_role }}</td>
<td class="text-center">{{ user.email }}</td>
<td class="text-center">{{ user.is_active|bool2str }}</td>
<td class="text-center">
<a href="../user_detail/?username={{ user.username }}" class="iframe btn btn-xs btn-primary">详情</a>
<a href="../user_edit/?username={{ user.username }}" class="btn btn-xs btn-info">编辑</a>
<a href="../user_del/?username={{ user.username }}" class="btn btn-xs btn-danger">删除</a>
</td>
<td>{{ user.id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.name }}</td>
<td>{{ user.username|groups_str }}</td>
<td>{{ user.id|get_role }}</td>
<td>{{ user.email }}</td>
<td>{{ user.is_active }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<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 class="row">
<div class="col-sm-6">
<div class="dataTables_info" id="editable_info" role="status" aria-live="polite">
Showing {{ contacts.start_index }} to {{ contacts.end_index }} of {{ p.count }} entries
</div>
</div>
<div class="col-sm-6">
<div class="dataTables_paginate paging_simple_numbers" id="editable_paginate">
<ul class="pagination" style="margin-top: 0; float: right">
{% if contacts.has_previous %}
<li class="paginate_button previous" aria-controls="editable" tabindex="0" id="editable_previous">
<a href="?page={{ contacts.previous_page_number }}">Previous</a>
</li>
{% else %}
<li class="paginate_button previous disabled" aria-controls="editable" tabindex="0" id="editable_previous">
<a href="#">Previous</a>
</li>
{% endif %}
{% for page in p.page_range %}
{% ifequal offset1 page %}
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li>
{% else %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li>
{% endifequal %}
{% endfor %}
{% if contacts.has_next %}
<li class="paginate_button next" aria-controls="editable" tabindex="0" id="editable_next">
<a href="?page={{ contacts.next_page_number }}">Next</a>
</li>
{% else %}
<li class="paginate_button next disabled" aria-controls="editable" tabindex="0" id="editable_next">
<a href="#">Next</a>
</li>
{% endif %}
</ul>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$(".iframe").colorbox({iframe:true, width:"70%", height:"70%"});
});
</script>
{% endblock %}

@ -0,0 +1,80 @@
{% 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>用户信息 <small> show user info.</small></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" style="display: block;">
<form method="post" action="">
<table class="table table-hover">
<thead>
<tr>
<th>
<div class="checkbox i-checks">
<input onclick="selectAll()" type="checkbox" name="select_all" style="select_all" id="select_all">
</div>
</th>
<th>ID</th>
<th>用户名</th>
<th>姓名</th>
<th>属组</th>
<th>角色</th>
<th>Email</th>
<th>激活</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>
<div class="checkbox i-checks">
<input type="checkbox" value="{{ user.id }}" name="selected">
</div>
</td>
<td>{{ user.id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.name }}</td>
<td>{{ user.username|groups_str }}</td>
<td>{{ user.id|get_role }}</td>
<td>{{ user.email }}</td>
<td>{{ user.is_active }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<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>
{% endblock %}

@ -11,7 +11,7 @@
<li ><a href="dashboard_3.html">Dashboard v.3</a></li>
</ul>-->
</li>
<li>
<li id="juser">
<a href="#"><i class="fa fa-rebel"></i> <span class="nav-label">用户管理</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li><a href="/juser/user_list/">查看用户</a></li>
@ -20,7 +20,7 @@
<li><a href="/juser/group_add/">添加属组</a></li>
</ul>
</li>
<li>
<li id="jasset">
<a href="mailbox.html"><i class="fa fa-cube"></i> <span class="nav-label">资产管理</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li><a href="/jasset/host_list/">查看资产</a></li>
@ -31,7 +31,7 @@
<li><a href="/jasset/group_add/">添加业务组</a></li>
</ul>
</li>
<li>
<li id="jperm">
<a href="#"><i class="fa fa-edit"></i> <span class="nav-label">授权管理</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li><a href="/jperm/perm_user_show/">查看授权</a></li>

@ -33,3 +33,9 @@
<!-- validator js -->
<script src="/static/js/validator/jquery.validator.js"></script>
<script src="/static/js/validator/zh_CN.js"></script>
<!-- active menu -->
<script>
var str = document.location.pathname.split("/")[1];
$("#"+str).addClass('active');
</script>
Loading…
Cancel
Save