Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
a998de59
Commit
a998de59
authored
Apr 01, 2015
by
guanghongwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
û
parent
2e5b2241
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
266 additions
and
91 deletions
+266
-91
context_processors.py
jumpserver/context_processors.py
+9
-3
mytags.py
jumpserver/templatetags/mytags.py
+8
-2
urls.py
juser/urls.py
+1
-1
views.py
juser/views.py
+36
-5
footer.html
templates/footer.html
+1
-1
sudo_list.html
templates/jperm/sudo_list.html
+3
-23
chg_info.html
templates/juser/chg_info.html
+133
-0
user_detail.html
templates/juser/user_detail.html
+40
-44
user_list.html
templates/juser/user_list.html
+16
-4
nav_li_profile.html
templates/nav_li_profile.html
+19
-8
No files found.
jumpserver/context_processors.py
View file @
a998de59
from
juser.models
import
User
from
jasset.models
import
Asset
from
jumpserver.api
import
*
def
name_proc
(
request
):
user_id
=
request
.
session
.
get
(
'user_id'
)
role_id
=
request
.
session
.
get
(
'role_id'
)
user_total_num
=
User
.
objects
.
all
()
.
count
()
user_active_num
=
User
.
objects
.
filter
(
is_active
=
True
)
.
count
()
if
role_id
==
2
:
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_active_num
=
Asset
.
objects
.
filter
(
is_active
=
True
)
.
count
()
request
.
session
.
set_expiry
(
3600
)
...
...
jumpserver/templatetags/mytags.py
View file @
a998de59
# coding: utf-8
import
re
import
time
from
django
import
template
from
juser.models
import
User
,
UserGroup
,
DEPT
from
jasset.models
import
BisGroup
from
jumpserver.api
import
*
register
=
template
.
Library
()
...
...
@@ -179,12 +177,19 @@ def to_name(user_id):
except
:
return
'非法用户'
@register.filter
(
name
=
'to_role_name'
)
def
to_role_name
(
role_id
):
role_dict
=
{
'0'
:
'普通用户'
,
'1'
:
'部门管理员'
,
'2'
:
'超级管理员'
}
return
role_dict
.
get
(
str
(
role_id
),
'未知'
)
@register.filter
(
name
=
'to_avatar'
)
def
to_avatar
(
role_id
=
'0'
):
role_dict
=
{
'0'
:
'user'
,
'1'
:
'admin'
,
'2'
:
'root'
}
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
)
\ No newline at end of file
juser/urls.py
View file @
a998de59
...
...
@@ -27,6 +27,6 @@ urlpatterns = patterns('juser.views',
(
r'^user_del_ajax/$'
,
'user_del_ajax'
),
(
r'^user_edit/$'
,
view_splitter
,
{
'su'
:
user_edit
,
'adm'
:
user_edit_adm
}),
(
r'^profile/$'
,
'profile'
),
(
r'^chg_
pass/$'
,
'chg_pass
'
),
(
r'^chg_
info/$'
,
'chg_info
'
),
(
r'^chg_role/$'
,
'chg_role'
),
)
juser/views.py
View file @
a998de59
...
...
@@ -233,10 +233,13 @@ def dept_list_adm(request):
return
render_to_response
(
'juser/dept_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_admin
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
(
'/'
)
...
...
@@ -953,8 +956,36 @@ def profile(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'
,
'用户管理'
,
'修改个人信息'
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
))
templates/footer.html
View file @
a998de59
<div
class=
"footer fixed"
>
<div
class=
"pull-right"
>
Version
<strong>
1.2
.0
</strong>
GPL.
Version
<strong>
2.0
.0
</strong>
GPL.
</div>
<div>
<strong>
Copyright
</strong>
Jumpserver.org Organization
©
2014-2015
...
...
templates/jperm/sudo_list.html
View file @
a998de59
...
...
@@ -66,7 +66,7 @@
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ group.name }}
</td>
<td
class=
"text-center"
>
{{ group.dept.name }}
</td>
<td
class=
"text-center"
><a
href=
"/juser/user_list/?
d
id={{ group.id }}"
>
{{ group.id | member_count }}
</a>
</td>
<td
class=
"text-center"
><a
href=
"/juser/user_list/?
g
id={{ 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_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>
{% endblock %}
\ No newline at end of file
templates/juser/chg_info.html
0 → 100644
View file @
a998de59
{% 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 使用的SSH密钥的密码
</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 %}
\ No newline at end of file
templates/juser/user_detail.html
View file @
a998de59
...
...
@@ -20,65 +20,61 @@
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
<th
class=
"text-center"
>
用户
</th>
<th
class=
"text-center"
>
详情
</th>
<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"
>
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 }}
</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.id | get_role }}
</td>
<td
class=
"text-center"
>
{{ user.dept.name }}
</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.date_joined }}
</td>
#}
{#
<td
class=
"text-center"
>
{{ user.last_login }}
</td>
#}
</tr>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
添加时间
</td>
<td
class=
"text-center"
>
{{ user.date_joined }}
</td>
<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
class=
"gradeX"
>
<td
class=
"text-center"
>
最后登录
</td>
<td
class=
"text-center"
>
{{ user.last_login }}
</td>
<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
class=
"gradeX"
>
<td
c
lass=
"text-center"
>
授权主机组
</td>
<td
class=
"text-center"
>
{% for
asset_group in asset_group_permed
%}
{{ asset_group.name }}
<tr>
<td
c
olspan=
"1"
class=
"text-center"
>
授权主机组:
</td>
<td
c
olspan=
"6"
c
lass=
"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>
...
...
templates/juser/user_list.html
View file @
a998de59
...
...
@@ -72,7 +72,7 @@
<td
class=
"text-center"
>
{{ user.id | get_role }}
</td>
<td
class=
"text-center"
>
{{ user.is_active|bool2str }}
</td>
<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 %}
<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>
...
...
@@ -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_del/?id={{ user.id }}"
class=
"btn btn-xs btn-danger {% if user.id|user_readonly %} disabled {% endif %}"
>
删除
</a>
{% endifequal %}
</td>
</tr>
{% endfor %}
...
...
@@ -102,8 +101,21 @@
<script>
$
(
document
).
ready
(
function
(){
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"70%"
});
var
check_array
=
[]
$
(
".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
}
})
});
var
check_array
=
[];
$
(
'#del_btn'
).
click
(
function
(){
if
(
confirm
(
"确定删除"
))
{
$
(
".gradeX input:checked"
).
each
(
function
()
{
check_array
.
push
(
$
(
this
).
attr
(
"value"
))
})
...
...
templates/nav_li_profile.html
View file @
a998de59
...
...
@@ -8,14 +8,9 @@
<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>
<ul
class=
"dropdown-menu animated fadeInRight m-t-xs"
>
<li><a
href=
"/juser/profile/"
>
个人信息
</a></li>
<li><a
href=
"/juser/chg_pass/"
>
修改密码
</a></li>
{% ifequal session_role_id 2 %}
<li><a
href=
"/juser/chg_role/"
>
切换普通角色
</a></li>
{% endifequal %}
{% ifequal session_role_id 1 %}
<li><a
href=
"/juser/chg_role/"
>
切换普通角色
</a></li>
{% endifequal %}
<li><a
value=
"/juser/user_detail/?id={{ session_user_id }}"
class=
"iframe"
>
个人信息
</a></li>
<li><a
href=
"/juser/chg_info/"
>
修改信息
</a></li>
<li><a
href=
"/juser/chg_role/"
>
切换角色
</a></li>
<li
class=
"divider"
></li>
<li><a
href=
"/logout/"
>
注销
</a></li>
...
...
@@ -25,4 +20,20 @@
JS+
</div>
</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>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment