mirror of https://github.com/jumpserver/jumpserver
菜单active
commit
449bde4b03
|
@ -38,3 +38,11 @@ def groups_str(username):
|
||||||
@register.filter(name='get_item')
|
@register.filter(name='get_item')
|
||||||
def get_item(dictionary, key):
|
def get_item(dictionary, key):
|
||||||
return dictionary.get(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'^user_list/$', 'user_list'),
|
||||||
(r'^group_add/$', 'group_add'),
|
(r'^group_add/$', 'group_add'),
|
||||||
(r'^group_list/$', 'group_list'),
|
(r'^group_list/$', 'group_list'),
|
||||||
|
(r'^user_detail/$', 'user_detail'),
|
||||||
|
(r'^user_del/$', 'user_del'),
|
||||||
|
(r'^user_edit/$', 'user_edit'),
|
||||||
)
|
)
|
||||||
|
|
117
juser/views.py
117
juser/views.py
|
@ -11,6 +11,7 @@ import ldap
|
||||||
from ldap import modlist
|
from ldap import modlist
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
import crypt
|
import crypt
|
||||||
|
from django.http import HttpResponseRedirect
|
||||||
|
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
@ -19,7 +20,7 @@ from juser.models import UserGroup, User
|
||||||
from connect import PyCrypt, KEY
|
from connect import PyCrypt, KEY
|
||||||
from connect import BASE_DIR
|
from connect import BASE_DIR
|
||||||
from connect import CONF
|
from connect import CONF
|
||||||
|
from django.core.paginator import Paginator, EmptyPage, InvalidPage
|
||||||
|
|
||||||
CRYPTOR = PyCrypt(KEY)
|
CRYPTOR = PyCrypt(KEY)
|
||||||
LDAP_ENABLE = CONF.getint('ldap', 'ldap_enable')
|
LDAP_ENABLE = CONF.getint('ldap', 'ldap_enable')
|
||||||
|
@ -107,6 +108,7 @@ class LDAPMgmt():
|
||||||
except ldap.LDAPError, e:
|
except ldap.LDAPError, e:
|
||||||
print e
|
print e
|
||||||
|
|
||||||
|
|
||||||
def gen_sha512(salt, password):
|
def gen_sha512(salt, password):
|
||||||
return crypt.crypt(password, '$6$%s$' % salt)
|
return crypt.crypt(password, '$6$%s$' % salt)
|
||||||
|
|
||||||
|
@ -152,14 +154,121 @@ def group_list(request):
|
||||||
|
|
||||||
def user_list(request):
|
def user_list(request):
|
||||||
user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'}
|
user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'}
|
||||||
header_title, path1, path2 = '查看用户 | Add User', 'juser', 'user_list'
|
header_title, path1, path2 = '查看用户 | Show User', 'juser', 'user_list'
|
||||||
users = User.objects.all()
|
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())
|
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):
|
def db_add_user(**kwargs):
|
||||||
groups_post = kwargs.pop('groups')
|
groups_post = kwargs.pop('groups')
|
||||||
user = User(**kwargs)
|
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:
|
for group_id in groups_post:
|
||||||
group = UserGroup.objects.filter(id=group_id)
|
group = UserGroup.objects.filter(id=group_id)
|
||||||
group_select.extend(group)
|
group_select.extend(group)
|
||||||
|
@ -249,7 +358,7 @@ def ldap_del_user(username):
|
||||||
group_dn = "cn=%s,ou=Group,%s" % (username, LDAP_BASE_DN)
|
group_dn = "cn=%s,ou=Group,%s" % (username, LDAP_BASE_DN)
|
||||||
sudo_dn = 'cn=%s,ou=Sudoers,%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(user_dn)
|
||||||
ldap_conn.delete(group_dn)
|
ldap_conn.delete(group_dn)
|
||||||
ldap_conn.delete(sudo_dn)
|
ldap_conn.delete(sudo_dn)
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="skin-1">
|
<body>
|
||||||
|
|
||||||
<div id="wrapper">
|
<div id="wrapper">
|
||||||
{% include 'nav.html' %}
|
{% include 'nav.html' %}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="footer fixed">
|
<div class="footer fixed">
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
Version <strong>2.2.0</strong> GPL.
|
Version <strong>1.2.0</strong> GPL.
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<strong>Copyright</strong> Jumpserver.org Organization © 2014-2015
|
<strong>Copyright</strong> Jumpserver.org Organization © 2014-2015
|
||||||
|
|
|
@ -74,7 +74,6 @@
|
||||||
form.submit();
|
form.submit();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -35,7 +35,7 @@
|
||||||
{% if msg %}
|
{% if msg %}
|
||||||
<div class="alert alert-success text-center">{{ msg }}</div>
|
<div class="alert alert-success text-center">{{ msg }}</div>
|
||||||
{% endif %}
|
{% 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>
|
<label for="username" class="col-sm-2 control-label">用户名<span class="red-fonts">*</span></label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="username" name="username" placeholder="Username" type="text" class="form-control" value={{ username }}>
|
<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,80 +1,120 @@
|
||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load mytags %}
|
{% load mytags %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% include 'nav_cat_bar.html' %}
|
{% include 'nav_cat_bar.html' %}
|
||||||
<div class="wrapper wrapper-content animated fadeInRight">
|
|
||||||
<div class="row">
|
<div class="wrapper wrapper-content animated fadeInRight">
|
||||||
<div class="col-lg-10">
|
<div class="row">
|
||||||
<div class="ibox float-e-margins">
|
<div class="col-lg-10">
|
||||||
<div class="ibox-title">
|
<div class="ibox float-e-margins">
|
||||||
<h5>用户信息 <small> show user info.</small></h5>
|
<div class="ibox-title">
|
||||||
<div class="ibox-tools">
|
<h5> 查看用户 <small> show user info.</small> </h5>
|
||||||
<a class="collapse-link">
|
<div class="ibox-tools">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<a class="collapse-link">
|
||||||
</a>
|
<i class="fa fa-chevron-up"></i>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
</a>
|
||||||
<i class="fa fa-wrench"></i>
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
</a>
|
<i class="fa fa-wrench"></i>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
</a>
|
||||||
<li><a href="#">未启用 1</a>
|
<ul class="dropdown-menu dropdown-user">
|
||||||
</li>
|
<li><a href="#">未启用 1</a>
|
||||||
<li><a href="#">未启用 2</a>
|
</li>
|
||||||
</li>
|
<li><a href="#">未启用 2</a>
|
||||||
</ul>
|
</li>
|
||||||
<a class="close-link">
|
</ul>
|
||||||
<i class="fa fa-times"></i>
|
<a class="close-link">
|
||||||
</a>
|
<i class="fa fa-times"></i>
|
||||||
</div>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="ibox-content" style="display: block;">
|
</div>
|
||||||
<form method="post" action="">
|
|
||||||
<table class="table table-hover">
|
<div class="ibox-content">
|
||||||
<thead>
|
<div class="">
|
||||||
<tr>
|
<a target="_blank" href="/juser/user_add/" class="btn btn-sm btn-primary "> 添加 </a>
|
||||||
<th>
|
</div>
|
||||||
<div class="checkbox i-checks">
|
|
||||||
<input onclick="selectAll()" type="checkbox" name="select_all" style="select_all" id="select_all">
|
<table class="table table-striped table-bordered table-hover " id="editable" >
|
||||||
</div>
|
<thead>
|
||||||
</th>
|
<tr>
|
||||||
<th>ID</th>
|
<th class="text-center"><input type="checkbox" class="i-checks" name=""></th>
|
||||||
<th>用户名</th>
|
<th class="text-center">ID</th>
|
||||||
<th>姓名</th>
|
<th class="text-center">用户名</th>
|
||||||
<th>属组</th>
|
<th class="text-center">姓名</th>
|
||||||
<th>角色</th>
|
<th class="text-center">属组</th>
|
||||||
<th>Email</th>
|
<th class="text-center">角色</th>
|
||||||
<th>激活</th>
|
<th class="text-center">Email</th>
|
||||||
</tr>
|
<th class="text-center">激活</th>
|
||||||
</thead>
|
<th class="text-center">操作</th>
|
||||||
<tbody>
|
</tr>
|
||||||
{% for user in users %}
|
</thead>
|
||||||
<tr>
|
<tbody>
|
||||||
<td>
|
{% for user in contacts.object_list %}
|
||||||
<div class="checkbox i-checks">
|
<tr class="gradeX">
|
||||||
<input type="checkbox" value="{{ user.id }}" name="selected">
|
<td class="text-center"><input type="checkbox" class="i-checks" name=""></td>
|
||||||
</div>
|
<td class="text-center"> {{ user.id }} </td>
|
||||||
</td>
|
<td class="text-center"> {{ user.username }} </td>
|
||||||
<td>{{ user.id }}</td>
|
<td class="text-center"> {{ user.name }} </td>
|
||||||
<td>{{ user.username }}</td>
|
<td class="text-center"> {{ user.username|groups_str }}</td>
|
||||||
<td>{{ user.name }}</td>
|
<td class="text-center">{{ user.id|get_role }}</td>
|
||||||
<td>{{ user.username|groups_str }}</td>
|
<td class="text-center">{{ user.email }}</td>
|
||||||
<td>{{ user.id|get_role }}</td>
|
<td class="text-center">{{ user.is_active|bool2str }}</td>
|
||||||
<td>{{ user.email }}</td>
|
<td class="text-center">
|
||||||
<td>{{ user.is_active }}</td>
|
<a href="../user_detail/?username={{ user.username }}" class="iframe btn btn-xs btn-primary">详情</a>
|
||||||
</tr>
|
<a href="../user_edit/?username={{ user.username }}" class="btn btn-xs btn-info">编辑</a>
|
||||||
{% endfor %}
|
<a href="../user_del/?username={{ user.username }}" class="btn btn-xs btn-danger">删除</a>
|
||||||
</tbody>
|
</td>
|
||||||
</table>
|
</tr>
|
||||||
<div class="form-group">
|
{% endfor %}
|
||||||
<div class="col-sm-4 col-sm-offset-2">
|
</tbody>
|
||||||
<button class="btn btn-white" type="submit">取消</button>
|
</table>
|
||||||
<button id="submit_button" class="btn btn-primary" type="submit">确认删除</button>
|
<div class="row">
|
||||||
</div>
|
<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>
|
||||||
</form>
|
</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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
$(".iframe").colorbox({iframe:true, width:"70%", height:"70%"});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
{% endblock %}
|
{% 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>
|
<li ><a href="dashboard_3.html">Dashboard v.3</a></li>
|
||||||
</ul>-->
|
</ul>-->
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li id="juser">
|
||||||
<a href="#"><i class="fa fa-rebel"></i> <span class="nav-label">用户管理</span><span class="fa arrow"></span></a>
|
<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">
|
<ul class="nav nav-second-level">
|
||||||
<li><a href="/juser/user_list/">查看用户</a></li>
|
<li><a href="/juser/user_list/">查看用户</a></li>
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
<li><a href="/juser/group_add/">添加属组</a></li>
|
<li><a href="/juser/group_add/">添加属组</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</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>
|
<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">
|
<ul class="nav nav-second-level">
|
||||||
<li><a href="/jasset/host_list/">查看资产</a></li>
|
<li><a href="/jasset/host_list/">查看资产</a></li>
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
<li><a href="/jasset/group_add/">添加业务组</a></li>
|
<li><a href="/jasset/group_add/">添加业务组</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li id="jperm">
|
||||||
<a href="#"><i class="fa fa-edit"></i> <span class="nav-label">授权管理</span><span class="fa arrow"></span></a>
|
<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">
|
<ul class="nav nav-second-level">
|
||||||
<li><a href="/jperm/perm_user_show/">查看授权</a></li>
|
<li><a href="/jperm/perm_user_show/">查看授权</a></li>
|
||||||
|
|
|
@ -33,3 +33,9 @@
|
||||||
<!-- validator js -->
|
<!-- validator js -->
|
||||||
<script src="/static/js/validator/jquery.validator.js"></script>
|
<script src="/static/js/validator/jquery.validator.js"></script>
|
||||||
<script src="/static/js/validator/zh_CN.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…
Reference in New Issue