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
fc007e96
Commit
fc007e96
authored
Mar 03, 2015
by
guanghongwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ĺܶ
parent
ad2a4d2d
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
282 additions
and
127 deletions
+282
-127
AddUserAsset.py
docs/AddUserAsset.py
+23
-17
mytags.py
jumpserver/templatetags/mytags.py
+14
-5
urls.py
juser/urls.py
+2
-0
views.py
juser/views.py
+126
-87
dept_detail.html
templates/juser/dept_detail.html
+43
-0
dept_list.html
templates/juser/dept_list.html
+23
-6
group_detail.html
templates/juser/group_detail.html
+1
-1
group_list.html
templates/juser/group_list.html
+33
-3
user_list.html
templates/juser/user_list.html
+15
-6
nav_bar_header.html
templates/nav_bar_header.html
+2
-2
No files found.
docs/AddUserAsset.py
View file @
fc007e96
...
@@ -2,14 +2,17 @@
...
@@ -2,14 +2,17 @@
import
django
import
django
import
os
import
os
import
sys
import
sys
import
random
import
datetime
sys
.
path
.
append
(
'../'
)
sys
.
path
.
append
(
'../'
)
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
django
.
setup
()
django
.
setup
()
from
juser.views
import
db_add_user
,
md5_crypt
,
CRYPTOR
from
juser.views
import
db_add_user
,
md5_crypt
,
CRYPTOR
,
db_add_group
from
jasset.models
import
Asset
,
IDC
,
BisGroup
from
jasset.models
import
Asset
,
IDC
,
BisGroup
from
juser.models
import
UserGroup
from
juser.models
import
UserGroup
,
DEPT
from
jasset.views
import
jasset_group_add
from
jasset.views
import
jasset_group_add
from
jperm.models
import
CmdGroup
from
jperm.models
import
CmdGroup
...
@@ -29,15 +32,18 @@ def test_add_asset_group():
...
@@ -29,15 +32,18 @@ def test_add_asset_group():
print
'Add:
%
s'
%
name
print
'Add:
%
s'
%
name
def
test_add_
user_group
():
def
test_add_
dept
():
for
i
in
range
(
1
,
2
0
):
for
i
in
range
(
1
,
10
0
):
name
=
'D
epartGroup
'
+
str
(
i
)
name
=
'D
EPT
'
+
str
(
i
)
UserGroup
.
objects
.
create
(
name
=
name
,
type
=
'M'
,
comment
=
name
)
print
"Add:
%
s"
%
name
print
'Add:
%
s'
%
name
DEPT
.
objects
.
create
(
name
=
name
,
comment
=
name
)
for
i
in
range
(
1
,
20
):
def
test_add_group
():
dept_all
=
DEPT
.
objects
.
all
()
for
i
in
range
(
1
,
100
):
name
=
'UserGroup'
+
str
(
i
)
name
=
'UserGroup'
+
str
(
i
)
UserGroup
.
objects
.
create
(
name
=
name
,
type
=
'A'
,
comment
=
name
)
UserGroup
.
objects
.
create
(
name
=
name
,
dept
=
random
.
choice
(
dept_all
)
,
comment
=
name
)
print
'Add:
%
s'
%
name
print
'Add:
%
s'
%
name
...
@@ -52,15 +58,18 @@ def test_add_cmd_group():
...
@@ -52,15 +58,18 @@ def test_add_cmd_group():
def
test_add_user
():
def
test_add_user
():
for
i
in
range
(
1
,
500
):
for
i
in
range
(
1
,
500
):
username
=
"test"
+
str
(
i
)
username
=
"test"
+
str
(
i
)
dept_all
=
DEPT
.
objects
.
all
()
group_all
=
UserGroup
.
objects
.
all
()
group_all_id
=
[
group
.
id
for
group
in
group_all
]
db_add_user
(
username
=
username
,
db_add_user
(
username
=
username
,
password
=
md5_crypt
(
username
),
password
=
md5_crypt
(
username
),
dept
=
random
.
choice
(
dept_all
),
name
=
username
,
email
=
'
%
s@jumpserver.org'
%
username
,
name
=
username
,
email
=
'
%
s@jumpserver.org'
%
username
,
groups
=
[
1
,
3
],
role
=
'CU'
,
groups
=
[
random
.
choice
(
group_all_id
)
for
i
in
range
(
1
,
4
)],
role
=
'CU'
,
ssh_pwd
=
CRYPTOR
.
encrypt
(
username
),
ssh_key_pwd
=
CRYPTOR
.
encrypt
(
username
),
ssh_key_pwd
=
CRYPTOR
.
encrypt
(
username
),
ldap_pwd
=
CRYPTOR
.
encrypt
(
username
),
ldap_pwd
=
CRYPTOR
.
encrypt
(
username
),
is_active
=
True
,
is_active
=
True
,
date_joined
=
0
)
date_joined
=
datetime
.
datetime
.
now
()
)
print
"Add:
%
s"
%
username
print
"Add:
%
s"
%
username
...
@@ -73,11 +82,8 @@ def test_add_asset():
...
@@ -73,11 +82,8 @@ def test_add_asset():
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
test_add_idc
()
#test_add_dept()
test_add_asset_group
()
#test_add_group()
test_add_user_group
()
test_add_cmd_group
()
test_add_asset
()
test_add_user
()
test_add_user
()
...
...
jumpserver/templatetags/mytags.py
View file @
fc007e96
...
@@ -4,7 +4,7 @@ import re
...
@@ -4,7 +4,7 @@ import re
import
time
import
time
from
django
import
template
from
django
import
template
from
juser.models
import
User
,
UserGroup
from
juser.models
import
User
,
UserGroup
,
DEPT
from
jasset.models
import
BisGroup
from
jasset.models
import
BisGroup
from
jumpserver.views
import
perm_user_asset
from
jumpserver.views
import
perm_user_asset
...
@@ -26,16 +26,16 @@ def int2str(value):
...
@@ -26,16 +26,16 @@ def int2str(value):
@register.filter
(
name
=
'get_role'
)
@register.filter
(
name
=
'get_role'
)
def
get_role
(
user_id
):
def
get_role
(
user_id
):
user_role
=
{
'SU'
:
u'超级管理员'
,
'
GA'
:
u'组
管理员'
,
'CU'
:
u'普通用户'
}
user_role
=
{
'SU'
:
u'超级管理员'
,
'
DA'
:
u'部门
管理员'
,
'CU'
:
u'普通用户'
}
user
=
User
.
objects
.
get
(
id
=
user_id
)
user
=
User
.
objects
.
get
(
id
=
user_id
)
return
user_role
.
get
(
str
(
user
.
role
))
return
user_role
.
get
(
str
(
user
.
role
))
@register.filter
(
name
=
'groups_str'
)
@register.filter
(
name
=
'groups_str'
)
def
groups_str
(
user
name
):
def
groups_str
(
user
_id
):
groups
=
[]
groups
=
[]
user
=
User
.
objects
.
get
(
username
=
username
)
user
=
User
.
objects
.
get
(
id
=
user_id
)
for
group
in
user
.
user_group
.
filter
(
type
=
'A'
):
for
group
in
user
.
group
.
all
(
):
groups
.
append
(
group
.
name
)
groups
.
append
(
group
.
name
)
if
len
(
groups
)
<
4
:
if
len
(
groups
)
<
4
:
return
' '
.
join
(
groups
)
return
' '
.
join
(
groups
)
...
@@ -71,6 +71,15 @@ def member_count(group_id):
...
@@ -71,6 +71,15 @@ def member_count(group_id):
group
=
UserGroup
.
objects
.
get
(
id
=
group_id
)
group
=
UserGroup
.
objects
.
get
(
id
=
group_id
)
return
group
.
user_set
.
count
()
return
group
.
user_set
.
count
()
@register.filter
(
name
=
'dept_member'
)
def
dept_member
(
dept_id
):
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
if
dept
:
dept
=
dept
[
0
]
return
dept
.
user_set
.
count
()
else
:
return
0
@register.filter
(
name
=
'perm_count'
)
@register.filter
(
name
=
'perm_count'
)
def
perm_count
(
group_id
):
def
perm_count
(
group_id
):
...
...
juser/urls.py
View file @
fc007e96
...
@@ -13,6 +13,8 @@ urlpatterns = patterns('juser.views',
...
@@ -13,6 +13,8 @@ urlpatterns = patterns('juser.views',
(
r'^group_list/$'
,
'group_list'
),
(
r'^group_list/$'
,
'group_list'
),
(
r'^dept_list/$'
,
'dept_list'
),
(
r'^dept_list/$'
,
'dept_list'
),
(
r'^dept_add/$'
,
'dept_add'
),
(
r'^dept_add/$'
,
'dept_add'
),
(
r'^dept_del/$'
,
'dept_del'
),
(
r'^dept_detail/$'
,
'dept_detail'
),
(
r'^user_detail/$'
,
'user_detail'
),
(
r'^user_detail/$'
,
'user_detail'
),
(
r'^user_del/$'
,
'user_del'
),
(
r'^user_del/$'
,
'user_del'
),
(
r'^user_edit/$'
,
'user_edit'
),
(
r'^user_edit/$'
,
'user_edit'
),
...
...
juser/views.py
View file @
fc007e96
...
@@ -62,15 +62,7 @@ def gen_sha512(salt, password):
...
@@ -62,15 +62,7 @@ def gen_sha512(salt, password):
return
crypt
.
crypt
(
password
,
'$6$
%
s$'
%
salt
)
return
crypt
.
crypt
(
password
,
'$6$
%
s$'
%
salt
)
def
db_add_group
(
**
kwargs
):
def
group_add_user
(
group
,
user_id
=
None
,
username
=
None
):
name
=
kwargs
.
get
(
'name'
)
group
=
UserGroup
.
objects
.
filter
(
name
=
name
)
if
group
:
raise
AddError
(
u'用户组
%
s 已经存在'
%
name
)
UserGroup
(
**
kwargs
)
.
save
()
def
group_add_user
(
group_name
,
user_id
=
None
,
username
=
None
):
try
:
try
:
if
user_id
:
if
user_id
:
user
=
User
.
objects
.
get
(
id
=
user_id
)
user
=
User
.
objects
.
get
(
id
=
user_id
)
...
@@ -79,10 +71,24 @@ def group_add_user(group_name, user_id=None, username=None):
...
@@ -79,10 +71,24 @@ def group_add_user(group_name, user_id=None, username=None):
except
ObjectDoesNotExist
:
except
ObjectDoesNotExist
:
raise
AddError
(
'用户获取失败'
)
raise
AddError
(
'用户获取失败'
)
else
:
else
:
group
=
UserGroup
.
objects
.
get
(
name
=
group_name
)
group
.
user_set
.
add
(
user
)
group
.
user_set
.
add
(
user
)
def
db_add_group
(
**
kwargs
):
name
=
kwargs
.
get
(
'name'
)
group
=
UserGroup
.
objects
.
filter
(
name
=
name
)
users
=
kwargs
.
pop
(
'users'
)
if
group
:
raise
AddError
(
u'用户组
%
s 已经存在'
%
name
)
group
=
UserGroup
(
**
kwargs
)
group
.
save
()
for
user_id
in
users
:
group_add_user
(
group
,
user_id
)
def
group_update_user
(
group_id
,
users_id
):
def
group_update_user
(
group_id
,
users_id
):
group
=
UserGroup
.
objects
.
get
(
id
=
group_id
)
group
=
UserGroup
.
objects
.
get
(
id
=
group_id
)
group
.
user_set
.
clear
()
group
.
user_set
.
clear
()
...
@@ -109,11 +115,13 @@ def db_update_user(**kwargs):
...
@@ -109,11 +115,13 @@ def db_update_user(**kwargs):
user
=
User
.
objects
.
filter
(
username
=
username
)
user
=
User
.
objects
.
filter
(
username
=
username
)
user
.
update
(
**
kwargs
)
user
.
update
(
**
kwargs
)
user
=
User
.
objects
.
get
(
username
=
username
)
user
=
User
.
objects
.
get
(
username
=
username
)
user
.
save
()
if
groups_post
:
group_select
=
[]
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
)
user
.
save
()
user
.
user_group
=
group_select
user
.
user_group
=
group_select
...
@@ -249,6 +257,10 @@ def dept_add(request):
...
@@ -249,6 +257,10 @@ def dept_add(request):
def
dept_list
(
request
):
def
dept_list
(
request
):
header_title
,
path1
,
path2
=
'查看部门'
,
'用户管理'
,
'查看部门'
header_title
,
path1
,
path2
=
'查看部门'
,
'用户管理'
,
'查看部门'
keyword
=
request
.
GET
.
get
(
'search'
)
if
keyword
:
contact_list
=
DEPT
.
objects
.
filter
(
Q
(
name__icontains
=
keyword
)
|
Q
(
comment__icontains
=
keyword
))
.
order_by
(
'name'
)
else
:
contact_list
=
DEPT
.
objects
.
all
()
contact_list
=
DEPT
.
objects
.
all
()
p
=
paginator
=
Paginator
(
contact_list
,
10
)
p
=
paginator
=
Paginator
(
contact_list
,
10
)
...
@@ -266,10 +278,32 @@ def dept_list(request):
...
@@ -266,10 +278,32 @@ def dept_list(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
))
def
group_add
(
request
,
group_type_select
=
'A'
):
def
dept_detail
(
request
):
dept_id
=
request
.
GET
.
get
(
'id'
,
None
)
if
not
dept_id
:
return
HttpResponseRedirect
(
'/juser/dept_list/'
)
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
if
dept
:
dept
=
dept
[
0
]
users
=
dept
.
user_set
.
all
()
return
render_to_response
(
'juser/dept_detail.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
dept_del
(
request
):
dept_id
=
request
.
GET
.
get
(
'id'
,
None
)
if
not
dept_id
:
return
HttpResponseRedirect
(
'/juser/dept_list/'
)
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
if
dept
:
dept
=
dept
[
0
]
dept
.
delete
()
return
HttpResponseRedirect
(
'/juser/dept_list/'
)
def
group_add
(
request
):
error
=
''
error
=
''
msg
=
''
msg
=
''
header_title
,
path1
,
path2
=
'添加
属组'
,
'用户管理'
,
'添加用户
组'
header_title
,
path1
,
path2
=
'添加
小组'
,
'用户管理'
,
'添加小
组'
user_all
=
User
.
objects
.
all
()
user_all
=
User
.
objects
.
all
()
dept_all
=
DEPT
.
objects
.
all
()
dept_all
=
DEPT
.
objects
.
all
()
...
@@ -290,7 +324,7 @@ def group_add(request, group_type_select='A'):
...
@@ -290,7 +324,7 @@ def group_add(request, group_type_select='A'):
else
:
else
:
AddError
(
u'部门不存在'
)
AddError
(
u'部门不存在'
)
db_add_group
(
name
=
group_name
,
dept
=
dept
,
comment
=
comment
)
db_add_group
(
name
=
group_name
,
users
=
users_selected
,
dept
=
dept
,
comment
=
comment
)
except
AddError
:
except
AddError
:
pass
pass
except
TypeError
:
except
TypeError
:
...
@@ -302,8 +336,12 @@ def group_add(request, group_type_select='A'):
...
@@ -302,8 +336,12 @@ def group_add(request, group_type_select='A'):
def
group_list
(
request
):
def
group_list
(
request
):
header_title
,
path1
,
path2
=
'查看属组 | Show Group'
,
'用户管理'
,
'查看用户组'
header_title
,
path1
,
path2
=
'查看小组'
,
'用户管理'
,
'查看小组'
contact_list
=
UserGroup
.
objects
.
all
()
keyword
=
request
.
GET
.
get
(
'search'
,
''
)
if
keyword
:
contact_list
=
UserGroup
.
objects
.
filter
(
Q
(
name__icontains
=
keyword
)
|
Q
(
comment__icontains
=
keyword
))
else
:
contact_list
=
UserGroup
.
objects
.
all
()
.
order_by
(
'name'
)
p
=
paginator
=
Paginator
(
contact_list
,
10
)
p
=
paginator
=
Paginator
(
contact_list
,
10
)
try
:
try
:
...
@@ -370,10 +408,80 @@ def group_edit(request):
...
@@ -370,10 +408,80 @@ def group_edit(request):
return
HttpResponseRedirect
(
'/juser/group_list/'
)
return
HttpResponseRedirect
(
'/juser/group_list/'
)
def
user_add
(
request
):
error
=
''
msg
=
''
header_title
,
path1
,
path2
=
'添加用户 | User Add'
,
'用户管理'
,
'添加用户'
user_role
=
{
'SU'
:
u'超级管理员'
,
'DA'
:
u'部门管理员'
,
'CU'
:
u'普通用户'
}
dept_all
=
DEPT
.
objects
.
all
()
group_all
=
UserGroup
.
objects
.
all
()
if
request
.
method
==
'POST'
:
username
=
request
.
POST
.
get
(
'username'
,
''
)
password
=
request
.
POST
.
get
(
'password'
,
''
)
name
=
request
.
POST
.
get
(
'name'
,
''
)
email
=
request
.
POST
.
get
(
'email'
,
''
)
dept_id
=
request
.
POST
.
get
(
'dept_id'
)
groups
=
request
.
POST
.
getlist
(
'groups'
,
[])
role_post
=
request
.
POST
.
get
(
'role'
,
'CU'
)
ssh_key_pwd
=
request
.
POST
.
get
(
'ssh_key_pwd'
,
''
)
is_active
=
request
.
POST
.
get
(
'is_active'
,
'1'
)
ldap_pwd
=
gen_rand_pwd
(
16
)
try
:
if
None
in
[
username
,
password
,
ssh_key_pwd
,
name
,
groups
,
role_post
,
is_active
]:
error
=
u'带*内容不能为空'
raise
AddError
user
=
User
.
objects
.
filter
(
username
=
username
)
if
user
:
error
=
u'用户
%
s 已存在'
%
username
raise
AddError
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
if
dept
:
dept
=
dept
[
0
]
else
:
error
=
u'部门不存在'
raise
AddError
(
error
)
except
AddError
:
pass
else
:
try
:
db_add_user
(
username
=
username
,
password
=
md5_crypt
(
password
),
name
=
name
,
email
=
email
,
dept
=
dept
,
groups
=
groups
,
role
=
role_post
,
ssh_key_pwd
=
CRYPTOR
.
encrypt
(
ssh_key_pwd
),
ldap_pwd
=
CRYPTOR
.
encrypt
(
ldap_pwd
),
is_active
=
is_active
,
date_joined
=
datetime
.
datetime
.
now
())
server_add_user
(
username
,
password
,
ssh_key_pwd
)
if
LDAP_ENABLE
:
ldap_add_user
(
username
,
ldap_pwd
)
msg
=
u'添加用户
%
s 成功!'
%
username
except
Exception
,
e
:
error
=
u'添加用户
%
s 失败
%
s '
%
(
username
,
e
)
try
:
db_del_user
(
username
)
server_del_user
(
username
)
if
LDAP_ENABLE
:
ldap_del_user
(
username
)
except
Exception
:
pass
return
render_to_response
(
'juser/user_add.html'
,
locals
(),
context_instance
=
RequestContext
(
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
=
'查看用户 | Show User'
,
'用户管理'
,
'用户列表'
header_title
,
path1
,
path2
=
'查看用户'
,
'用户管理'
,
'用户列表'
users
=
contact_list
=
User
.
objects
.
all
()
.
order_by
(
'id'
)
keyword
=
request
.
GET
.
get
(
'search'
,
''
)
if
keyword
:
contact_list
=
User
.
objects
.
filter
(
Q
(
username__icontains
=
keyword
)
|
Q
(
name__icontains
=
keyword
))
.
order_by
(
'name'
)
else
:
contact_list
=
User
.
objects
.
all
()
.
order_by
(
'id'
)
p
=
paginator
=
Paginator
(
contact_list
,
10
)
p
=
paginator
=
Paginator
(
contact_list
,
10
)
try
:
try
:
...
@@ -479,72 +587,6 @@ def user_edit(request):
...
@@ -479,72 +587,6 @@ def user_edit(request):
return
render_to_response
(
'juser/user_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'juser/user_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
user_add
(
request
):
error
=
''
msg
=
''
header_title
,
path1
,
path2
=
'添加用户 | User Add'
,
'用户管理'
,
'添加用户'
user_role
=
{
'SU'
:
u'超级管理员'
,
'DA'
:
u'部门管理员'
,
'CU'
:
u'普通用户'
}
dept_all
=
DEPT
.
objects
.
all
()
group_all
=
UserGroup
.
objects
.
all
()
if
request
.
method
==
'POST'
:
username
=
request
.
POST
.
get
(
'username'
,
''
)
password
=
request
.
POST
.
get
(
'password'
,
''
)
name
=
request
.
POST
.
get
(
'name'
,
''
)
email
=
request
.
POST
.
get
(
'email'
,
''
)
dept_id
=
request
.
POST
.
get
(
'dept_id'
)
groups
=
request
.
POST
.
getlist
(
'groups'
,
[])
role_post
=
request
.
POST
.
get
(
'role'
,
'CU'
)
ssh_key_pwd
=
request
.
POST
.
get
(
'ssh_key_pwd'
,
''
)
is_active
=
request
.
POST
.
get
(
'is_active'
,
'1'
)
ldap_pwd
=
gen_rand_pwd
(
16
)
try
:
if
None
in
[
username
,
password
,
ssh_key_pwd
,
name
,
groups
,
role_post
,
is_active
]:
error
=
u'带*内容不能为空'
raise
AddError
user
=
User
.
objects
.
filter
(
username
=
username
)
if
user
:
error
=
u'用户
%
s 已存在'
%
username
raise
AddError
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
if
dept
:
dept
=
dept
[
0
]
else
:
error
=
u'部门不存在'
raise
AddError
(
error
)
except
AddError
:
pass
else
:
try
:
db_add_user
(
username
=
username
,
password
=
md5_crypt
(
password
),
name
=
name
,
email
=
email
,
dept
=
dept
,
groups
=
groups
,
role
=
role_post
,
ssh_key_pwd
=
CRYPTOR
.
encrypt
(
ssh_key_pwd
),
ldap_pwd
=
CRYPTOR
.
encrypt
(
ldap_pwd
),
is_active
=
is_active
,
date_joined
=
datetime
.
datetime
.
now
())
server_add_user
(
username
,
password
,
ssh_key_pwd
)
if
LDAP_ENABLE
:
ldap_add_user
(
username
,
ldap_pwd
)
msg
=
u'添加用户
%
s 成功!'
%
username
except
Exception
,
e
:
error
=
u'添加用户
%
s 失败
%
s '
%
(
username
,
e
)
try
:
db_del_user
(
username
)
server_del_user
(
username
)
if
LDAP_ENABLE
:
ldap_del_user
(
username
)
except
Exception
:
pass
return
render_to_response
(
'juser/user_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
profile
(
request
):
def
profile
(
request
):
user_id
=
request
.
session
.
get
(
'user_id'
)
user_id
=
request
.
session
.
get
(
'user_id'
)
if
not
user_id
:
if
not
user_id
:
...
@@ -558,6 +600,3 @@ def chg_pass(request):
...
@@ -558,6 +600,3 @@ def chg_pass(request):
return
render_to_response
(
'juser/user_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'juser/user_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
templates/juser/dept_detail.html
0 → 100644
View file @
fc007e96
{% 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"
><b>
{{ dept.name }}
</b>
部门成员
</h2>
<div
class=
"ibox-content"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
<th
class=
"text-center"
>
用户名
</th>
<th
class=
"text-center"
>
姓名
</th>
<th
class=
"text-center"
>
角色
</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ user.username }}
</td>
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
>
{{ user.id|get_role }}
</td>
</tr>
{% endfor %}
</tbody>
</tbody>
</table>
</div>
</div>
</body>
</html>
\ No newline at end of file
templates/juser/dept_list.html
View file @
fc007e96
...
@@ -31,11 +31,25 @@
...
@@ -31,11 +31,25 @@
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
<div
class=
""
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/juser/dept_add/"
class=
"btn btn-sm btn-primary "
>
添加
</a>
<a
target=
"_blank"
href=
"/juser/dept_add/"
class=
"btn btn-sm btn-primary "
>
添加
</a>
<a
target=
"_blank"
href=
"/juser/group_add/"
class=
"btn btn-sm btn-danger "
>
删除所选
</a>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"search"
placeholder=
"Search"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
type=
"submit"
class=
"btn btn-sm btn-primary"
>
Search
</button>
</div>
</div>
</form>
</div>
</div>
<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"
>
<input
type=
"checkbox"
id=
"select_all"
onclick=
"selectAll()"
name=
"select_all"
>
</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>
...
@@ -45,13 +59,16 @@
...
@@ -45,13 +59,16 @@
<tbody>
<tbody>
{% for dept in contacts.object_list %}
{% for dept in contacts.object_list %}
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
<input
type=
"checkbox"
name=
"selected"
value=
"{{ dept.id }}"
>
</td>
<td
class=
"text-center"
>
{{ dept.name }}
</td>
<td
class=
"text-center"
>
{{ dept.name }}
</td>
<td
class=
"text-center"
>
{{ dept.
name
}}
</td>
<td
class=
"text-center"
>
{{ dept.
id | dept_member
}}
</td>
<td
class=
"text-center"
>
{{ dept.comment }}
</td>
<td
class=
"text-center"
>
{{ dept.comment }}
</td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<a
title=
"[ {{ dept.name }} ] 成员信息"
href=
"../dept_detail/?id={{
group
.id }}"
class=
"iframe btn btn-xs btn-primary"
>
成员
</a>
<a
title=
"[ {{ dept.name }} ] 成员信息"
href=
"../dept_detail/?id={{
dept
.id }}"
class=
"iframe btn btn-xs btn-primary"
>
成员
</a>
<a
href=
"../dept_edit/?id={{
group
.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../dept_edit/?id={{
dept
.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../dept_del/?id={{
group
.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
<a
href=
"../dept_del/?id={{
dept
.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
</td>
</td>
</tr>
</tr>
{% endfor %}
{% endfor %}
...
@@ -75,8 +92,8 @@
...
@@ -75,8 +92,8 @@
<a
href=
"#"
>
Previous
</a>
<a
href=
"#"
>
Previous
</a>
</li>
</li>
{% endif %}
{% endif %}
{% for page in p
.p
age_range %}
{% for page in page_range %}
{% ifequal
offset1
page %}
{% ifequal
current_page
page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
...
...
templates/juser/group_detail.html
View file @
fc007e96
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
<body>
<body>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"contact-box"
>
<div
class=
"contact-box"
>
<h2
class=
"text-center"
>
{{ group.name }} 属组详情
</h2>
<h2
class=
"text-center"
>
<b>
{{ group.name }}
</b>
组中成员
</h2>
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
...
...
templates/juser/group_list.html
View file @
fc007e96
...
@@ -31,11 +31,26 @@
...
@@ -31,11 +31,26 @@
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
<div
class=
""
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/juser/group_add/"
class=
"btn btn-sm btn-primary "
>
添加
</a>
<a
target=
"_blank"
href=
"/juser/group_add/"
class=
"btn btn-sm btn-primary "
>
添加
</a>
<a
target=
"_blank"
href=
"/juser/group_add/"
class=
"btn btn-sm btn-danger "
>
删除所选
</a>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"search"
placeholder=
"Search"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
type=
"submit"
class=
"btn btn-sm btn-primary"
>
Search
</button>
</div>
</div>
</form>
</div>
</div>
<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"
>
<input
type=
"checkbox"
id=
"select_all"
onclick=
"selectAll()"
name=
"select_all"
>
</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>
...
@@ -46,9 +61,12 @@
...
@@ -46,9 +61,12 @@
<tbody>
<tbody>
{% for group in contacts.object_list %}
{% for group in contacts.object_list %}
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
<input
type=
"checkbox"
name=
"selected"
value=
"{{ group.id }}"
>
</td>
<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"
>
{{ group.
name
}}
</td>
<td
class=
"text-center"
>
{{ group.
id | member_count
}}
</td>
<td
class=
"text-center"
>
{{ group.comment }}
</td>
<td
class=
"text-center"
>
{{ group.comment }}
</td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<a
title=
"[ {{ group.name }} ] 成员信息"
href=
"../group_detail/?id={{ group.id }}"
class=
"iframe btn btn-xs btn-primary"
>
成员
</a>
<a
title=
"[ {{ group.name }} ] 成员信息"
href=
"../group_detail/?id={{ group.id }}"
class=
"iframe btn btn-xs btn-primary"
>
成员
</a>
...
@@ -77,8 +95,8 @@
...
@@ -77,8 +95,8 @@
<a
href=
"#"
>
Previous
</a>
<a
href=
"#"
>
Previous
</a>
</li>
</li>
{% endif %}
{% endif %}
{% for page in p
.p
age_range %}
{% for page in page_range %}
{% ifequal
offset1
page %}
{% ifequal
current_page
page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
...
@@ -107,6 +125,17 @@
...
@@ -107,6 +125,17 @@
$
(
document
).
ready
(
function
(){
$
(
document
).
ready
(
function
(){
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"70%"
});
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"70%"
});
});
});
{
#
function
user_group_search
(){
#
}
{
#
$
.
ajax
({
#
}
{
#
type
:
"GET"
,
#
}
{
#
url
:
"/juser/group_search/"
,
#
}
{
#
data
:
$
(
"#search_form"
).
serialize
(),
#
}
{
#
success
:
function
(
data
)
{
#
}
{
#
$
(
"#contents_form"
).
html
(
data
);
#
}
{
#
}
#
}
{
#
});
#
}
{
#
}
#
}
</script>
</script>
{% endblock %}
{% endblock %}
\ No newline at end of file
templates/juser/user_list.html
View file @
fc007e96
...
@@ -31,6 +31,17 @@
...
@@ -31,6 +31,17 @@
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
<div
class=
""
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/juser/user_add/"
class=
"btn btn-sm btn-primary "
>
添加
</a>
<a
target=
"_blank"
href=
"/juser/user_add/"
class=
"btn btn-sm btn-primary "
>
添加
</a>
<a
target=
"_blank"
href=
"/juser/group_add/"
class=
"btn btn-sm btn-danger "
>
删除所选
</a>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"search"
placeholder=
"Search"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
type=
"submit"
class=
"btn btn-sm btn-primary"
>
Search
</button>
</div>
</div>
</form>
</div>
</div>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
...
@@ -39,11 +50,10 @@
...
@@ -39,11 +50,10 @@
<th
class=
"text-center"
>
<th
class=
"text-center"
>
<input
type=
"checkbox"
id=
"select_all"
onclick=
"selectAll()"
name=
"select_all"
>
<input
type=
"checkbox"
id=
"select_all"
onclick=
"selectAll()"
name=
"select_all"
>
</th>
</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"
>
部门
</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>
<th
class=
"text-center"
>
操作
</th>
...
@@ -55,12 +65,11 @@
...
@@ -55,12 +65,11 @@
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<input
type=
"checkbox"
name=
"selected"
value=
"{{ user.id }}"
>
<input
type=
"checkbox"
name=
"selected"
value=
"{{ user.id }}"
>
</td>
</td>
<td
class=
"text-center"
>
{{ user.id }}
</td>
<td
class=
"text-center"
>
{{ user.username }}
</td>
<td
class=
"text-center"
>
{{ user.username }}
</td>
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
>
{{ user.
username|group_manage_str
}}
</td>
<td
class=
"text-center"
>
{{ user.
dept.name
}}
</td>
<td
class=
"text-center"
>
{{ user.
username|groups_str }}
</td>
<td
class=
"text-center"
>
{{ user.
id | groups_str }}
</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"
>
<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 }} ] 详情"
href=
"../user_detail/?id={{ user.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
...
...
templates/nav_bar_header.html
View file @
fc007e96
<nav
class=
"navbar navbar-static-top"
role=
"navigation"
style=
"margin-bottom: 0"
>
<nav
class=
"navbar navbar-static-top"
role=
"navigation"
style=
"margin-bottom: 0"
>
<div
class=
"navbar-header"
>
<div
class=
"navbar-header"
>
<a
class=
"navbar-minimalize minimalize-styl-2 btn btn-primary "
href=
"#"
><i
class=
"fa fa-bars"
></i>
</a>
<a
class=
"navbar-minimalize minimalize-styl-2 btn btn-primary "
href=
"#"
><i
class=
"fa fa-bars"
></i>
</a>
<form
role=
"search"
class=
"navbar-form-custom"
method=
"
post"
action=
"search_results.html
"
>
<form
role=
"search"
class=
"navbar-form-custom"
method=
"
get"
action=
"
"
>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<input
type=
"text"
placeholder=
"输入搜索..."
class=
"form-control"
name=
"
top-
search"
id=
"top-search"
>
<input
type=
"text"
placeholder=
"输入搜索..."
class=
"form-control"
name=
"search"
id=
"top-search"
>
</div>
</div>
</form>
</form>
</div>
</div>
...
...
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