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
8bf9103f
Commit
8bf9103f
authored
Sep 08, 2015
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改资产管理
parent
4eb78e15
Show whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
1278 additions
and
2371 deletions
+1278
-2371
AddUserAsset.py
docs/AddUserAsset.py
+7
-7
models.py
jasset/models.py
+4
-18
urls.py
jasset/urls.py
+18
-20
views.py
jasset/views.py
+468
-873
models.py
jperm/models.py
+3
-3
api.py
jumpserver/api.py
+3
-3
settings.py
jumpserver/settings.py
+2
-2
mytags.py
jumpserver/templatetags/mytags.py
+327
-313
urls.py
jumpserver/urls.py
+1
-1
views.py
juser/views.py
+6
-8
base.js
static/js/base.js
+11
-11
index.html
templates/index.html
+2
-2
asset_add.html
templates/jasset/asset_add.html
+48
-89
asset_detail.html
templates/jasset/asset_detail.html
+64
-87
asset_edit.html
templates/jasset/asset_edit.html
+165
-0
asset_list.html
templates/jasset/asset_list.html
+48
-43
group_add.html
templates/jasset/group_add.html
+30
-53
group_list.html
templates/jasset/group_list.html
+12
-20
host_edit.html
templates/jasset/host_edit.html
+0
-229
idc_add.html
templates/jasset/idc_add.html
+0
-80
idc_detail.html
templates/jasset/idc_detail.html
+0
-212
idc_edit.html
templates/jasset/idc_edit.html
+0
-110
idc_list.html
templates/jasset/idc_list.html
+0
-126
group_list.html
templates/juser/group_list.html
+1
-1
user_detail.html
templates/juser/user_detail.html
+28
-30
user_list.html
templates/juser/user_list.html
+20
-18
nav.html
templates/nav.html
+4
-6
nav_bar_header.html
templates/nav_bar_header.html
+5
-5
nav_li_profile.html
templates/nav_li_profile.html
+1
-1
No files found.
docs/AddUserAsset.py
View file @
8bf9103f
...
@@ -127,14 +127,14 @@ def test_add_log():
...
@@ -127,14 +127,14 @@ def test_add_log():
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
install
()
#
install()
test_add_dept
()
#
test_add_dept()
test_add_group
()
#
test_add_group()
test_add_user
()
#
test_add_user()
test_add_idc
()
#
test_add_idc()
test_add_asset_group
()
#
test_add_asset_group()
test_add_asset
()
test_add_asset
()
test_add_log
()
#
test_add_log()
...
...
jasset/models.py
View file @
8bf9103f
...
@@ -3,15 +3,7 @@ from django.db import models
...
@@ -3,15 +3,7 @@ from django.db import models
from
juser.models
import
User
,
UserGroup
from
juser.models
import
User
,
UserGroup
class
IDC
(
models
.
Model
):
class
AssetGroup
(
models
.
Model
):
name
=
models
.
CharField
(
max_length
=
40
,
unique
=
True
)
comment
=
models
.
CharField
(
max_length
=
80
,
blank
=
True
,
null
=
True
)
def
__unicode__
(
self
):
return
self
.
name
class
BisGroup
(
models
.
Model
):
GROUP_TYPE
=
(
GROUP_TYPE
=
(
(
'P'
,
'PRIVATE'
),
(
'P'
,
'PRIVATE'
),
(
'A'
,
'ASSET'
),
(
'A'
,
'ASSET'
),
...
@@ -67,17 +59,12 @@ class BisGroup(models.Model):
...
@@ -67,17 +59,12 @@ class BisGroup(models.Model):
class
Asset
(
models
.
Model
):
class
Asset
(
models
.
Model
):
LOGIN_TYPE_CHOICES
=
(
(
'L'
,
'LDAP'
),
(
'M'
,
'MAP'
),
)
ip
=
models
.
IPAddressField
(
unique
=
True
)
ip
=
models
.
IPAddressField
(
unique
=
True
)
port
=
models
.
IntegerField
(
max_length
=
6
)
port
=
models
.
IntegerField
(
max_length
=
6
)
idc
=
models
.
ForeignKey
(
IDC
)
group
=
models
.
ManyToManyField
(
AssetGroup
)
bis_group
=
models
.
ManyToManyField
(
BisGroup
)
login_type
=
models
.
CharField
(
max_length
=
1
,
choices
=
LOGIN_TYPE_CHOICES
,
default
=
'L'
)
username
=
models
.
CharField
(
max_length
=
20
,
blank
=
True
,
null
=
True
)
username
=
models
.
CharField
(
max_length
=
20
,
blank
=
True
,
null
=
True
)
password
=
models
.
CharField
(
max_length
=
80
,
blank
=
True
,
null
=
True
)
password
=
models
.
CharField
(
max_length
=
80
,
blank
=
True
,
null
=
True
)
use_default_auth
=
models
.
BooleanField
(
default
=
True
)
date_added
=
models
.
DateTimeField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
(),
null
=
True
)
date_added
=
models
.
DateTimeField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
(),
null
=
True
)
is_active
=
models
.
BooleanField
(
default
=
True
)
is_active
=
models
.
BooleanField
(
default
=
True
)
comment
=
models
.
CharField
(
max_length
=
100
,
blank
=
True
,
null
=
True
)
comment
=
models
.
CharField
(
max_length
=
100
,
blank
=
True
,
null
=
True
)
...
@@ -108,4 +95,4 @@ class AssetAlias(models.Model):
...
@@ -108,4 +95,4 @@ class AssetAlias(models.Model):
alias
=
models
.
CharField
(
max_length
=
100
,
blank
=
True
,
null
=
True
)
alias
=
models
.
CharField
(
max_length
=
100
,
blank
=
True
,
null
=
True
)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
self
.
comment
return
self
.
alias
\ No newline at end of file
jasset/urls.py
View file @
8bf9103f
...
@@ -3,26 +3,23 @@ from django.conf.urls import patterns, include, url
...
@@ -3,26 +3,23 @@ from django.conf.urls import patterns, include, url
from
jasset.views
import
*
from
jasset.views
import
*
urlpatterns
=
patterns
(
''
,
urlpatterns
=
patterns
(
''
,
url
(
r'^host_add/$'
,
host_add
),
url
(
r'^asset_add/$'
,
asset_add
),
url
(
r"^host_add_multi/$"
,
host_add_batch
),
# url(r"^host_add_multi/$", host_add_batch),
url
(
r'^host_list/$'
,
host_list
),
url
(
r'^search/$'
,
host_search
),
url
(
r"^host_detail/$"
,
host_detail
),
url
(
r"^dept_host_ajax/$"
,
dept_host_ajax
),
url
(
r"^show_all_ajax/$"
,
show_all_ajax
),
url
(
r'^idc_add/$'
,
idc_add
),
url
(
r'^idc_list/$'
,
idc_list
),
url
(
r'^idc_edit/$'
,
idc_edit
),
url
(
r'^idc_detail/$'
,
idc_detail
),
url
(
r'^idc_del/$'
,
idc_del
),
url
(
r'^group_add/$'
,
group_add
),
url
(
r'^group_add/$'
,
group_add
),
url
(
r'^group_edit/$'
,
group_edit
),
url
(
r'^group_list/$'
,
group_list
),
url
(
r'^group_list/$'
,
group_list
),
url
(
r'^group_detail/$'
,
group_detail
),
url
(
r'^asset_list/$'
,
asset_list
),
url
(
r'^group_del_host/$'
,
group_del_host
),
url
(
r'^asset_del/$'
,
asset_del
),
url
(
r'^group_del/$'
,
group_del
),
url
(
r"^asset_detail/$"
,
asset_detail
),
url
(
r'^host_del/(\w+)/$'
,
host_del
),
url
(
r'^asset_edit/$'
,
asset_edit
),
url
(
r'^host_edit/$'
,
view_splitter
,
{
'su'
:
host_edit
,
'adm'
:
host_edit_adm
}),
# url(r'^search/$', host_search),
url
(
r'^host_edit/batch/$'
,
host_edit_batch
),
# url(r"^host_detail/$", host_detail),
url
(
r'^host_edit_common/batch/$'
,
host_edit_common_batch
),
# url(r"^dept_host_ajax/$", dept_host_ajax),
# url(r"^show_all_ajax/$", show_all_ajax),
# url(r'^group_edit/$', group_edit),
# url(r'^group_list/$', group_list),
# url(r'^group_detail/$', group_detail),
# url(r'^group_del_host/$', group_del_host),
# url(r'^group_del/$', group_del),
# url(r'^host_edit/batch/$', host_edit_batch),
# url(r'^host_edit_common/batch/$', host_edit_common_batch),
)
)
\ No newline at end of file
jasset/views.py
View file @
8bf9103f
...
@@ -7,917 +7,512 @@ from django.template import RequestContext
...
@@ -7,917 +7,512 @@ from django.template import RequestContext
from
django.shortcuts
import
get_object_or_404
from
django.shortcuts
import
get_object_or_404
from
jperm.models
import
Perm
from
jperm.models
import
Perm
from
jasset.asset_api
import
*
from
jumpserver.api
import
*
from
jumpserver.api
import
*
@require_role
(
'admin'
)
def
group_add
(
request
):
"""
Add asset group
添加资产组
"""
header_title
,
path1
,
path2
=
u'添加资产组'
,
u'资产管理'
,
u'添加资产组'
asset_all
=
Asset
.
objects
.
all
()
if
request
.
method
==
'POST'
:
name
=
request
.
POST
.
get
(
'name'
,
''
)
asset_select
=
request
.
POST
.
getlist
(
'asset_select'
,
[])
comment
=
request
.
POST
.
get
(
'comment'
,
''
)
try
:
if
not
name
:
error
=
u'组名不能为空'
raise
ServerError
(
error
)
def
get_host_groups
(
groups
):
asset_group_test
=
get_object
(
AssetGroup
,
name
=
name
)
""" 获取主机所属的组类 """
if
asset_group_test
:
ret
=
[]
error
=
u"该组名
%
s 已存在"
%
name
for
group_id
in
groups
:
raise
ServerError
(
error
)
group
=
BisGroup
.
objects
.
filter
(
id
=
group_id
)
if
group
:
group
=
group
[
0
]
ret
.
append
(
group
)
group_all
=
get_object_or_404
(
BisGroup
,
name
=
'ALL'
)
ret
.
append
(
group_all
)
return
ret
def
get_host_depts
(
depts
):
""" 获取主机所属的部门类 """
ret
=
[]
for
dept_id
in
depts
:
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
if
dept
:
dept
=
dept
[
0
]
ret
.
append
(
dept
)
return
ret
def
db_host_insert
(
host_info
,
username
=
''
,
password
=
''
):
""" 添加主机时数据库操作函数 """
ip
,
port
,
idc
,
jtype
,
group
,
dept
,
active
,
comment
=
host_info
idc
=
IDC
.
objects
.
filter
(
id
=
idc
)
if
idc
:
idc
=
idc
[
0
]
if
jtype
==
'M'
:
password
=
cryptor
.
encrypt
(
password
)
a
=
Asset
(
ip
=
ip
,
port
=
port
,
login_type
=
jtype
,
idc
=
idc
,
is_active
=
int
(
active
),
comment
=
comment
,
username
=
username
,
password
=
password
)
else
:
a
=
Asset
(
ip
=
ip
,
port
=
port
,
login_type
=
jtype
,
idc
=
idc
,
is_active
=
int
(
active
),
comment
=
comment
)
a
.
save
()
all_group
=
BisGroup
.
objects
.
get
(
name
=
'ALL'
)
groups
=
get_host_groups
(
group
)
groups
.
append
(
all_group
)
depts
=
get_host_depts
(
dept
)
a
.
bis_group
=
groups
a
.
dept
=
depts
a
.
save
()
def
db_host_update
(
host_info
,
username
=
''
,
password
=
''
):
""" 修改主机时数据库操作函数 """
ip
,
port
,
idc
,
jtype
,
group
,
dept
,
active
,
comment
,
host
=
host_info
idc
=
IDC
.
objects
.
filter
(
id
=
idc
)
if
idc
:
idc
=
idc
[
0
]
groups
=
get_host_groups
(
group
)
depts
=
get_host_depts
(
dept
)
host
.
ip
=
ip
host
.
port
=
port
host
.
login_type
=
jtype
host
.
idc
=
idc
host
.
is_active
=
int
(
active
)
host
.
comment
=
comment
if
jtype
==
'M'
:
if
password
!=
host
.
password
:
password
=
cryptor
.
encrypt
(
password
)
host
.
password
=
password
host
.
username
=
username
host
.
password
=
password
host
.
save
()
host
.
bis_group
=
groups
host
.
dept
=
depts
host
.
save
()
def
batch_host_edit
(
host_info
,
j_user
=
''
,
j_password
=
''
):
""" 批量修改主机函数 """
j_id
,
j_ip
,
j_idc
,
j_port
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
=
host_info
groups
,
depts
=
[],
[]
is_active
=
{
u'是'
:
'1'
,
u'否'
:
'2'
}
login_types
=
{
'LDAP'
:
'L'
,
'MAP'
:
'M'
}
a
=
Asset
.
objects
.
get
(
id
=
j_id
)
if
'...'
in
j_group
[
0
]
.
split
():
groups
=
a
.
bis_group
.
all
()
else
:
for
group
in
j_group
[
0
]
.
split
():
c
=
BisGroup
.
objects
.
get
(
name
=
group
.
strip
())
groups
.
append
(
c
)
if
'...'
in
j_dept
[
0
]
.
split
():
except
ServerError
:
depts
=
a
.
dept
.
all
()
pass
else
:
for
d
in
j_dept
[
0
]
.
split
():
p
=
DEPT
.
objects
.
get
(
name
=
d
.
strip
())
depts
.
append
(
p
)
j_type
=
login_types
[
j_type
]
j_idc
=
IDC
.
objects
.
get
(
name
=
j_idc
)
if
j_type
==
'M'
:
if
a
.
password
!=
j_password
:
j_password
=
cryptor
.
decrypt
(
j_password
)
a
.
ip
=
j_ip
a
.
port
=
j_port
a
.
login_type
=
j_type
a
.
idc
=
j_idc
a
.
is_active
=
j_active
a
.
comment
=
j_comment
a
.
username
=
j_user
a
.
password
=
j_password
else
:
a
.
ip
=
j_ip
a
.
port
=
j_port
a
.
idc
=
j_idc
a
.
login_type
=
j_type
a
.
is_active
=
is_active
[
j_active
]
a
.
comment
=
j_comment
a
.
save
()
a
.
bis_group
=
groups
a
.
dept
=
depts
a
.
save
()
def
db_host_delete
(
request
,
host_id
):
""" 删除主机操作 """
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset
=
[
host_id
]):
return
httperror
(
request
,
'删除失败, 您无权删除!'
)
asset
=
Asset
.
objects
.
filter
(
id
=
host_id
)
if
asset
:
asset
.
delete
()
else
:
else
:
return
httperror
(
request
,
'删除失败, 没有此主机!'
)
db_add_group
(
name
=
name
,
comment
=
comment
,
asset_select
=
asset_select
)
msg
=
u"主机组
%
s 添加成功"
%
name
return
my_render
(
'jasset/group_add.html'
,
locals
(),
request
)
def
db_idc_delete
(
request
,
idc_id
):
""" 删除IDC操作 """
if
idc_id
==
1
:
return
httperror
(
request
,
'删除失败, 默认IDC不能删除!'
)
default_idc
=
IDC
.
objects
.
get
(
id
=
1
)
idc
=
IDC
.
objects
.
filter
(
id
=
idc_id
)
@require_role
(
'admin'
)
if
idc
:
def
group_list
(
request
):
idc_class
=
idc
[
0
]
"""
idc_class
.
asset_set
.
update
(
idc
=
default_idc
)
list asset group
idc
.
delete
()
列出资产组
else
:
"""
return
httperror
(
request
,
'删除失败, 没有这个IDC!'
)
header_title
,
path1
,
path2
=
u'查看资产组'
,
u'资产管理'
,
u'查看资产组'
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
gid
=
request
.
GET
.
get
(
'gid'
)
@require_admin
sid
=
request
.
GET
.
get
(
'sid'
)
def
host_add
(
request
):
asset_group_list
=
AssetGroup
.
objects
.
all
()
""" 添加主机 """
header_title
,
path1
,
path2
=
u'添加主机'
,
u'资产管理'
,
u'添加主机'
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
eidc
=
IDC
.
objects
.
exclude
(
name
=
'ALL'
)
if
is_super_user
(
request
):
edept
=
DEPT
.
objects
.
all
()
egroup
=
BisGroup
.
objects
.
exclude
(
name
=
'ALL'
)
elif
is_group_admin
(
request
):
dept
=
get_session_user_info
(
request
)[
5
]
egroup
=
dept
.
bisgroup_set
.
all
()
if
request
.
method
==
'POST'
:
if
keyword
:
j_ip
=
request
.
POST
.
get
(
'j_ip'
)
asset_groups
=
asset_group_list
.
filter
(
Q
(
name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
j_idc
=
request
.
POST
.
get
(
'j_idc'
)
j_port
=
request
.
POST
.
get
(
'j_port'
)
j_type
=
request
.
POST
.
get
(
'j_type'
)
j_group
=
request
.
POST
.
getlist
(
'j_group'
)
j_active
=
request
.
POST
.
get
(
'j_active'
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
)
if
is_super_user
(
request
):
j_dept
=
request
.
POST
.
getlist
(
'j_dept'
)
host_info
=
[
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
]
elif
is_group_admin
(
request
):
j_dept
=
request
.
POST
.
get
(
'j_dept'
)
host_info
=
[
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
[
j_dept
],
j_active
,
j_comment
]
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset_group
=
j_group
,
edept
=
[
j_dept
]):
return
httperror
(
request
,
u'添加失败,您无权操作!'
)
if
Asset
.
objects
.
filter
(
ip
=
str
(
j_ip
)):
emg
=
u'该IP
%
s 已存在!'
%
j_ip
return
my_render
(
'jasset/host_add.html'
,
locals
(),
request
)
if
j_type
==
'M'
:
j_user
=
request
.
POST
.
get
(
'j_user'
)
j_password
=
request
.
POST
.
get
(
'j_password'
,
''
)
db_host_insert
(
host_info
,
j_user
,
j_password
)
else
:
db_host_insert
(
host_info
)
smg
=
u'主机
%
s 添加成功'
%
j_ip
return
my_render
(
'jasset/host_add.html'
,
locals
(),
request
)
asset_group_list
,
p
,
asset_groups
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
asset_group_list
,
request
)
return
my_render
(
'jasset/group_list.html'
,
locals
(),
request
)
@require_
admin
@require_
role
(
'admin'
)
def
host_add_batch
(
request
):
def
asset_add
(
request
):
"""
批量添加主机 """
"""
header_title
,
path1
,
path2
=
u'批量添加主机'
,
u'资产管理'
,
u'批量添加主机'
Asset add view
login_types
=
{
'LDAP'
:
'L'
,
'MAP'
:
'M'
}
添加资产
active_types
=
{
'激活'
:
1
,
'禁用'
:
0
}
"""
dept_id
=
get_user_dept
(
request
)
header_title
,
path1
,
path2
=
u'添加资产'
,
u'资产管理'
,
u'添加资产'
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
multi_hosts
=
request
.
POST
.
get
(
'j_multi'
)
.
split
(
'
\n
'
)
ip
=
request
.
POST
.
get
(
'ip'
)
for
host
in
multi_hosts
:
port
=
request
.
POST
.
get
(
'port'
)
if
host
==
''
:
group
=
request
.
POST
.
getlist
(
'group'
)
break
use_default_auth
=
True
if
request
.
POST
.
getlist
(
'use_default_auth'
,
[])
else
False
j_ip
,
j_port
,
j_type
,
j_idc
,
j_groups
,
j_depts
,
j_active
,
j_comment
=
host
.
split
()
is_active
=
True
if
request
.
POST
.
get
(
'is_active'
)
else
False
j_active
=
active_types
[
str
(
j_active
)]
comment
=
request
.
POST
.
get
(
'comment'
)
j_group
=
ast
.
literal_eval
(
j_groups
)
j_dept
=
ast
.
literal_eval
(
j_depts
)
if
j_type
not
in
[
'LDAP'
,
'MAP'
]:
return
httperror
(
request
,
u'没有
%
s这种登录方式!'
%
j_type
)
j_type
=
login_types
[
j_type
]
idc
=
IDC
.
objects
.
filter
(
name
=
j_idc
)
if
idc
:
j_idc
=
idc
[
0
]
.
id
else
:
return
httperror
(
request
,
'添加失败, 没有
%
s这个IDC'
%
j_idc
)
group_ids
,
dept_ids
=
[],
[]
for
group_name
in
j_group
:
group
=
BisGroup
.
objects
.
filter
(
name
=
group_name
)
if
group
:
group_id
=
group
[
0
]
.
id
else
:
return
httperror
(
request
,
'添加失败, 没有
%
s这个主机组'
%
group_name
)
group_ids
.
append
(
group_id
)
for
dept_name
in
j_dept
:
if
not
use_default_auth
:
dept
=
DEPT
.
objects
.
filter
(
name
=
dept_name
)
username
=
request
.
POST
.
get
(
'username'
)
if
dept
:
password
=
request
.
POST
.
get
(
'password'
)
dept_id
=
dept
[
0
]
.
id
password_encode
=
CRYPTOR
.
encrypt
(
password
)
else
:
else
:
return
httperror
(
request
,
'添加失败, 没有
%
s这个部门'
%
dept_name
)
username
=
None
dept_ids
.
append
(
dept_id
)
password_encode
=
None
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset_group
=
group_ids
,
edept
=
dept_ids
):
return
httperror
(
request
,
'添加失败, 没有
%
s这个主机组'
%
group_name
)
if
Asset
.
objects
.
filter
(
ip
=
str
(
j_ip
)):
return
httperror
(
request
,
'添加失败, 改IP
%
s已存在'
%
j_ip
)
host_info
=
[
j_ip
,
j_port
,
j_idc
,
j_type
,
group_ids
,
dept_ids
,
j_active
,
j_comment
]
db_host_insert
(
host_info
)
smg
=
u'批量添加添加成功'
return
my_render
(
'jasset/host_add_multi.html'
,
locals
(),
request
)
return
my_render
(
'jasset/host_add_multi.html'
,
locals
(),
request
)
try
:
if
Asset
.
objects
.
filter
(
ip
=
str
(
ip
)):
error
=
u'该IP
%
s 已存在!'
%
ip
raise
ServerError
(
error
)
@require_admin
except
ServerError
:
def
host_edit_batch
(
request
):
pass
""" 批量修改主机 """
if
request
.
method
==
'POST'
:
len_table
=
request
.
POST
.
get
(
'len_table'
)
for
i
in
range
(
int
(
len_table
)):
j_id
=
"editable["
+
str
(
i
)
+
"][j_id]"
j_ip
=
"editable["
+
str
(
i
)
+
"][j_ip]"
j_port
=
"editable["
+
str
(
i
)
+
"][j_port]"
j_dept
=
"editable["
+
str
(
i
)
+
"][j_dept]"
j_idc
=
"editable["
+
str
(
i
)
+
"][j_idc]"
j_type
=
"editable["
+
str
(
i
)
+
"][j_type]"
j_group
=
"editable["
+
str
(
i
)
+
"][j_group]"
j_active
=
"editable["
+
str
(
i
)
+
"][j_active]"
j_comment
=
"editable["
+
str
(
i
)
+
"][j_comment]"
j_id
=
request
.
POST
.
get
(
j_id
)
.
strip
()
j_ip
=
request
.
POST
.
get
(
j_ip
)
.
strip
()
j_port
=
request
.
POST
.
get
(
j_port
)
.
strip
()
j_dept
=
request
.
POST
.
getlist
(
j_dept
)
j_idc
=
request
.
POST
.
get
(
j_idc
)
.
strip
()
j_type
=
request
.
POST
.
get
(
j_type
)
.
strip
()
j_group
=
request
.
POST
.
getlist
(
j_group
)
j_active
=
request
.
POST
.
get
(
j_active
)
.
strip
()
j_comment
=
request
.
POST
.
get
(
j_comment
)
.
strip
()
host_info
=
[
j_id
,
j_ip
,
j_idc
,
j_port
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
]
batch_host_edit
(
host_info
)
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
@require_login
def
host_edit_common_batch
(
request
):
""" 普通用户批量修改主机别名 """
u
=
get_session_user_info
(
request
)[
2
]
if
request
.
method
==
'POST'
:
len_table
=
request
.
POST
.
get
(
'len_table'
)
for
i
in
range
(
int
(
len_table
)):
j_id
=
"editable["
+
str
(
i
)
+
"][j_id]"
j_alias
=
"editable["
+
str
(
i
)
+
"][j_alias]"
j_id
=
request
.
POST
.
get
(
j_id
,
''
)
.
strip
()
j_alias
=
request
.
POST
.
get
(
j_alias
,
''
)
.
strip
()
a
=
Asset
.
objects
.
get
(
id
=
j_id
)
asset_alias
=
AssetAlias
.
objects
.
filter
(
user
=
u
,
host
=
a
)
if
asset_alias
:
asset_alias
=
asset_alias
[
0
]
asset_alias
.
alias
=
j_alias
asset_alias
.
save
()
else
:
else
:
AssetAlias
.
objects
.
create
(
user
=
u
,
host
=
a
,
alias
=
j_alias
)
db_asset_add
(
return
my_render
(
'jasset/host_list_common.html'
,
locals
(),
request
)
ip
=
ip
,
port
=
port
,
use_default_auth
=
use_default_auth
,
is_active
=
is_active
,
comment
=
comment
,
username
=
username
,
password
=
password_encode
)
@require_login
def
host_list
(
request
):
msg
=
u'主机
%
s 添加成功'
%
ip
""" 列出主机 """
return
my_render
(
'jasset/asset_add.html'
,
locals
(),
request
)
#
#
# @require_admin
# def host_add_batch(request):
# """ 批量添加主机 """
# header_title, path1, path2 = u'批量添加主机', u'资产管理', u'批量添加主机'
# login_types = {'LDAP': 'L', 'MAP': 'M'}
# active_types = {'激活': 1, '禁用': 0}
# dept_id = get_user_dept(request)
# if request.method == 'POST':
# multi_hosts = request.POST.get('j_multi').split('\n')
# for host in multi_hosts:
# if host == '':
# break
# j_ip, j_port, j_type, j_idc, j_groups, j_depts, j_active, j_comment = host.split()
# j_active = active_types[str(j_active)]
# j_group = ast.literal_eval(j_groups)
# j_dept = ast.literal_eval(j_depts)
#
# if j_type not in ['LDAP', 'MAP']:
# return httperror(request, u'没有%s这种登录方式!' %j_type)
#
# j_type = login_types[j_type]
# idc = IDC.objects.filter(name=j_idc)
# if idc:
# j_idc = idc[0].id
# else:
# return httperror(request, '添加失败, 没有%s这个IDC' % j_idc)
#
# group_ids, dept_ids = [], []
# for group_name in j_group:
# group = BisGroup.objects.filter(name=group_name)
# if group:
# group_id = group[0].id
# else:
# return httperror(request, '添加失败, 没有%s这个主机组' % group_name)
# group_ids.append(group_id)
#
# for dept_name in j_dept:
# dept = DEPT.objects.filter(name=dept_name)
# if dept:
# dept_id = dept[0].id
# else:
# return httperror(request, '添加失败, 没有%s这个部门' % dept_name)
# dept_ids.append(dept_id)
#
# if is_group_admin(request) and not validate(request, asset_group=group_ids, edept=dept_ids):
# return httperror(request, '添加失败, 没有%s这个主机组' % group_name)
#
# if Asset.objects.filter(ip=str(j_ip)):
# return httperror(request, '添加失败, 改IP%s已存在' % j_ip)
#
# host_info = [j_ip, j_port, j_idc, j_type, group_ids, dept_ids, j_active, j_comment]
# db_host_insert(host_info)
#
# smg = u'批量添加添加成功'
# return my_render('jasset/host_add_multi.html', locals(), request)
#
# return my_render('jasset/host_add_multi.html', locals(), request)
#
#
# @require_admin
# def host_edit_batch(request):
# """ 批量修改主机 """
# if request.method == 'POST':
# len_table = request.POST.get('len_table')
# for i in range(int(len_table)):
# j_id = "editable[" + str(i) + "][j_id]"
# j_ip = "editable[" + str(i) + "][j_ip]"
# j_port = "editable[" + str(i) + "][j_port]"
# j_dept = "editable[" + str(i) + "][j_dept]"
# j_idc = "editable[" + str(i) + "][j_idc]"
# j_type = "editable[" + str(i) + "][j_type]"
# j_group = "editable[" + str(i) + "][j_group]"
# j_active = "editable[" + str(i) + "][j_active]"
# j_comment = "editable[" + str(i) + "][j_comment]"
#
# j_id = request.POST.get(j_id).strip()
# j_ip = request.POST.get(j_ip).strip()
# j_port = request.POST.get(j_port).strip()
# j_dept = request.POST.getlist(j_dept)
# j_idc = request.POST.get(j_idc).strip()
# j_type = request.POST.get(j_type).strip()
# j_group = request.POST.getlist(j_group)
# j_active = request.POST.get(j_active).strip()
# j_comment = request.POST.get(j_comment).strip()
#
# host_info = [j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment]
# batch_host_edit(host_info)
#
# return HttpResponseRedirect('/jasset/host_list/')
#
#
# @require_role(role='user')
# def host_edit_common_batch(request):
# """ 普通用户批量修改主机别名 """
# u = get_session_user_info(request)[2]
# if request.method == 'POST':
# len_table = request.POST.get('len_table')
# for i in range(int(len_table)):
# j_id = "editable[" + str(i) + "][j_id]"
# j_alias = "editable[" + str(i) + "][j_alias]"
# j_id = request.POST.get(j_id, '').strip()
# j_alias = request.POST.get(j_alias, '').strip()
# a = Asset.objects.get(id=j_id)
# asset_alias = AssetAlias.objects.filter(user=u, host=a)
# if asset_alias:
# asset_alias = asset_alias[0]
# asset_alias.alias = j_alias
# asset_alias.save()
# else:
# AssetAlias.objects.create(user=u, host=a, alias=j_alias)
# return my_render('jasset/host_list_common.html', locals(), request)
@require_role
(
role
=
'user'
)
def
asset_list
(
request
):
"""
list assets
列出资产表
"""
header_title
,
path1
,
path2
=
u'查看主机'
,
u'资产管理'
,
u'查看主机'
header_title
,
path1
,
path2
=
u'查看主机'
,
u'资产管理'
,
u'查看主机'
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
dept_id
=
get_session_user_info
(
request
)[
3
]
gid
=
request
.
GET
.
get
(
'gid'
,
''
)
# asset group id
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
did
=
request
.
GET
.
get
(
'did'
,
''
)
gid
=
request
.
GET
.
get
(
'gid'
,
''
)
sid
=
request
.
GET
.
get
(
'sid'
,
''
)
sid
=
request
.
GET
.
get
(
'sid'
,
''
)
user_id
=
get_session_user_info
(
request
)[
0
]
assets_list
=
Asset
.
objects
.
all
()
.
order_by
(
'ip'
)
post_all
=
Asset
.
objects
.
all
()
.
order_by
(
'ip'
)
if
keyword
:
post_keyword_all
=
Asset
.
objects
.
filter
(
Q
(
ip__contains
=
keyword
)
|
assets_list
=
assets_list
.
filter
(
Q
(
ip__contains
=
keyword
)
|
Q
(
idc__name__contains
=
keyword
)
|
Q
(
bis_group__name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
.
distinct
()
.
order_by
(
'ip'
)
Q
(
comment__contains
=
keyword
))
.
distinct
()
.
order_by
(
'ip'
)
if
did
:
if
is_common_user
(
request
):
return
httperror
(
request
,
u'您无权查看!'
)
if
is_group_admin
(
request
):
assets_list
,
p
,
assets
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
assets_list
,
request
)
user
,
dept
=
get_session_user_dept
(
request
)
return
my_render
(
'jasset/asset_list.html'
,
locals
(),
request
)
else
:
dept
=
DEPT
.
objects
.
get
(
id
=
did
)
posts
=
dept
.
asset_set
.
all
()
return
my_render
(
'jasset/host_list_nop.html'
,
locals
(),
request
)
elif
gid
:
if
is_common_user
(
request
):
return
httperror
(
request
,
u'您无权查看!'
)
elif
is_group_admin
(
request
)
and
not
validate
(
request
,
user_group
=
[
gid
]):
return
httperror
(
request
,
u'您无权查看!'
)
posts
=
[]
user_group
=
UserGroup
.
objects
.
filter
(
id
=
gid
)
if
user_group
:
perms
=
Perm
.
objects
.
filter
(
user_group
=
user_group
)
for
perm
in
perms
:
for
post
in
perm
.
asset_group
.
asset_set
.
all
():
posts
.
append
(
post
)
posts
=
list
(
set
(
posts
))
else
:
return
httperror
(
request
,
u'没有这个小组!'
)
return
my_render
(
'jasset/host_list_nop.html'
,
locals
(),
request
)
elif
sid
:
if
is_common_user
(
request
):
return
httperror
(
request
,
u'您无权查看!'
)
elif
is_group_admin
(
request
)
and
not
validate
(
request
,
user_group
=
[
sid
]):
return
httperror
(
request
,
u'您无权查看!'
)
posts
,
asset_groups
=
[],
[]
user_group
=
UserGroup
.
objects
.
filter
(
id
=
int
(
sid
))
if
user_group
:
user_group
=
user_group
[
0
]
for
perm
in
user_group
.
sudoperm_set
.
all
():
asset_groups
.
extend
(
perm
.
asset_group
.
all
())
for
asset_group
in
asset_groups
:
posts
.
extend
(
asset_group
.
asset_set
.
all
())
posts
=
list
(
set
(
posts
))
else
:
return
httperror
(
request
,
u'没有这个sudo授权!'
)
return
my_render
(
'jasset/host_list_nop.html'
,
locals
(),
request
)
else
:
if
is_super_user
(
request
):
if
keyword
:
posts
=
post_keyword_all
else
:
posts
=
post_all
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
my_render
(
'jasset/host_list.html'
,
locals
(),
request
)
elif
is_group_admin
(
request
):
@require_role
(
'admin'
)
if
keyword
:
def
asset_del
(
request
):
posts
=
post_keyword_all
.
filter
(
dept
=
dept
)
"""
else
:
del a asset
posts
=
post_all
.
filter
(
dept
=
dept
)
删除主机
"""
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
return
my_render
(
'jasset/host_list.html'
,
locals
(),
request
)
if
asset_id
:
Asset
.
objects
.
filter
(
id
=
asset_id
)
.
delete
()
elif
is_common_user
(
request
):
return
HttpResponse
(
u'删除成功'
)
user_id
,
username
=
get_session_user_info
(
request
)[
0
:
2
]
return
Http404
posts
=
user_perm_asset_api
(
username
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
my_render
(
'jasset/host_list_common.html'
,
locals
(),
request
)
@require_admin
def
host_del
(
request
,
offset
):
""" 删除主机 """
if
offset
==
'multi'
:
len_list
=
request
.
POST
.
get
(
"len_list"
)
for
i
in
range
(
int
(
len_list
)):
key
=
"id_list["
+
str
(
i
)
+
"]"
host_id
=
request
.
POST
.
get
(
key
)
db_host_delete
(
request
,
host_id
)
else
:
db_host_delete
(
request
,
offset
)
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
@require_
super_user
@require_
role
(
role
=
'super'
)
def
hos
t_edit
(
request
):
def
asse
t_edit
(
request
):
""" 修改主机 """
""" 修改主机 """
header_title
,
path1
,
path2
=
u'修改主机'
,
u'资产管理'
,
u'修改主机'
header_title
,
path1
,
path2
=
u'修改资产'
,
u'资产管理'
,
u'修改资产'
actives
=
{
1
:
u'激活'
,
0
:
u'禁用'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
eidc
=
IDC
.
objects
.
all
()
egroup
=
BisGroup
.
objects
.
exclude
(
name
=
'ALL'
)
edept
=
DEPT
.
objects
.
all
()
host_id
=
request
.
GET
.
get
(
'id'
,
''
)
post
=
Asset
.
objects
.
filter
(
id
=
int
(
host_id
))
if
post
:
post
=
post
[
0
]
else
:
return
httperror
(
request
,
'没有此主机!'
)
e_group
=
post
.
bis_group
.
all
()
e_dept
=
post
.
dept
.
all
()
if
request
.
method
==
'POST'
:
j_ip
=
request
.
POST
.
get
(
'j_ip'
,
''
)
j_idc
=
request
.
POST
.
get
(
'j_idc'
,
''
)
j_port
=
request
.
POST
.
get
(
'j_port'
,
''
)
j_type
=
request
.
POST
.
get
(
'j_type'
,
''
)
j_dept
=
request
.
POST
.
getlist
(
'j_dept'
,
''
)
j_group
=
request
.
POST
.
getlist
(
'j_group'
,
''
)
j_active
=
request
.
POST
.
get
(
'j_active'
,
''
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
,
''
)
host_info
=
[
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
,
post
]
if
j_type
==
'M'
:
j_user
=
request
.
POST
.
get
(
'j_user'
)
j_password
=
request
.
POST
.
get
(
'j_password'
)
db_host_update
(
host_info
,
j_user
,
j_password
)
else
:
db_host_update
(
host_info
)
smg
=
u'主机
%
s 修改成功'
%
j_ip
return
HttpResponseRedirect
(
'/jasset/host_detail/?id=
%
s'
%
host_id
)
return
my_render
(
'jasset/host_edit.html'
,
locals
(),
request
)
@require_admin
def
host_edit_adm
(
request
):
""" 部门管理员修改主机 """
header_title
,
path1
,
path2
=
u'修改主机'
,
u'资产管理'
,
u'修改主机'
actives
=
{
1
:
u'激活'
,
0
:
u'禁用'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
eidc
=
IDC
.
objects
.
all
()
dept
=
get_session_user_info
(
request
)[
5
]
egroup
=
BisGroup
.
objects
.
exclude
(
name
=
'ALL'
)
.
filter
(
dept
=
dept
)
host_id
=
request
.
GET
.
get
(
'id'
,
''
)
post
=
Asset
.
objects
.
filter
(
id
=
int
(
host_id
))
if
post
:
post
=
post
[
0
]
else
:
return
httperror
(
request
,
'没有此主机!'
)
e_group
=
post
.
bis_group
.
all
()
if
request
.
method
==
'POST'
:
j_ip
=
request
.
POST
.
get
(
'j_ip'
)
j_idc
=
request
.
POST
.
get
(
'j_idc'
)
j_port
=
request
.
POST
.
get
(
'j_port'
)
j_type
=
request
.
POST
.
get
(
'j_type'
)
j_dept
=
request
.
POST
.
getlist
(
'j_dept'
)
j_group
=
request
.
POST
.
getlist
(
'j_group'
)
j_active
=
request
.
POST
.
get
(
'j_active'
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
)
host_info
=
[
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
]
if
not
validate
(
request
,
asset_group
=
j_group
,
edept
=
j_dept
):
emg
=
u'修改失败,您无权操作!'
return
my_render
(
'jasset/host_edit.html'
,
locals
(),
request
)
if
j_type
==
'M'
:
j_user
=
request
.
POST
.
get
(
'j_user'
)
j_password
=
request
.
POST
.
get
(
'j_password'
)
db_host_update
(
host_info
,
j_user
,
j_password
,
post
)
else
:
db_host_update
(
host_info
,
post
)
smg
=
u'主机
%
s 修改成功'
%
j_ip
return
HttpResponseRedirect
(
'/jasset/host_detail/?id=
%
s'
%
host_id
)
return
my_render
(
'jasset/host_edit.html'
,
locals
(),
request
)
@require_login
def
host_detail
(
request
):
""" 主机详情 """
header_title
,
path1
,
path2
=
u'主机详细信息'
,
u'资产管理'
,
u'主机详情'
host_id
=
request
.
GET
.
get
(
'id'
,
''
)
post
=
Asset
.
objects
.
filter
(
id
=
host_id
)
if
not
post
:
return
httperror
(
request
,
'没有此主机!'
)
post
=
post
[
0
]
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset
=
[
host_id
]):
return
httperror
(
request
,
'您无权查看!'
)
elif
is_common_user
(
request
):
username
=
get_session_user_info
(
request
)[
1
]
user_permed_hosts
=
user_perm_asset_api
(
username
)
if
post
not
in
user_permed_hosts
:
return
httperror
(
request
,
'您无权查看!'
)
else
:
log_all
=
Log
.
objects
.
filter
(
host
=
post
.
ip
)
log
,
log_more
=
log_all
[:
10
],
log_all
[
10
:]
user_permed_list
=
asset_perm_api
(
post
)
return
my_render
(
'jasset/host_detail.html'
,
locals
(),
request
)
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
if
not
asset_id
:
return
HttpResponse
(
'没有该主机'
)
asset
=
get_object
(
Asset
,
id
=
asset_id
)
@require_super_user
def
idc_add
(
request
):
""" 添加IDC """
header_title
,
path1
,
path2
=
u'添加IDC'
,
u'资产管理'
,
u'添加IDC'
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
j_idc
=
request
.
POST
.
get
(
'j_idc'
)
ip
=
request
.
POST
.
get
(
'ip'
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
)
port
=
request
.
POST
.
get
(
'port'
)
if
IDC
.
objects
.
filter
(
name
=
j_idc
):
groups
=
request
.
POST
.
getlist
(
'groups'
)
emg
=
u'该IDC已存在!'
use_default_auth
=
True
if
request
.
POST
.
getlist
(
'use_default_auth'
,
[])
else
False
return
my_render
(
'jasset/idc_add.html'
,
locals
(),
request
)
is_active
=
True
if
request
.
POST
.
get
(
'is_active'
)
else
False
else
:
comment
=
request
.
POST
.
get
(
'comment'
)
smg
=
u'IDC:
%
s添加成功'
%
j_idc
IDC
.
objects
.
create
(
name
=
j_idc
,
comment
=
j_comment
)
return
my_render
(
'jasset/idc_add.html'
,
locals
(),
request
)
@require_admin
def
idc_list
(
request
):
""" 列出IDC """
header_title
,
path1
,
path2
=
u'查看IDC'
,
u'资产管理'
,
u'查看IDC'
dept_id
=
get_user_dept
(
request
)
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
if
keyword
:
posts
=
IDC
.
objects
.
filter
(
Q
(
name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
else
:
posts
=
IDC
.
objects
.
exclude
(
name
=
'ALL'
)
.
order_by
(
'id'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
my_render
(
'jasset/idc_list.html'
,
locals
(),
request
)
@require_super_user
def
idc_edit
(
request
):
""" 修改IDC """
header_title
,
path1
,
path2
=
u'编辑IDC'
,
u'资产管理'
,
u'编辑IDC'
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc
=
IDC
.
objects
.
filter
(
id
=
idc_id
)
if
int
(
idc_id
)
==
1
:
return
httperror
(
request
,
u'默认IDC不能编辑!'
)
if
idc
:
idc
=
idc
[
0
]
default
=
IDC
.
objects
.
get
(
id
=
1
)
.
asset_set
.
all
()
eposts
=
Asset
.
objects
.
filter
(
idc
=
idc
)
.
order_by
(
'ip'
)
posts
=
[
g
for
g
in
default
if
g
not
in
eposts
]
else
:
return
httperror
(
request
,
u'此IDC不存在'
)
if
request
.
method
==
'POST'
:
idc_id
=
request
.
POST
.
get
(
'id'
)
j_idc
=
request
.
POST
.
get
(
'j_idc'
)
j_hosts
=
request
.
POST
.
getlist
(
'j_hosts'
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
)
idc_default
=
request
.
POST
.
getlist
(
'idc_default'
)
idc
=
IDC
.
objects
.
filter
(
id
=
idc_id
)
if
idc
:
idc
.
update
(
name
=
j_idc
,
comment
=
j_comment
)
for
host_id
in
j_hosts
:
Asset
.
objects
.
filter
(
id
=
host_id
)
.
update
(
idc
=
idc
[
0
])
i
=
IDC
.
objects
.
get
(
id
=
1
)
for
host
in
idc_default
:
g
=
Asset
.
objects
.
filter
(
id
=
host
)
.
update
(
idc
=
i
)
else
:
return
httperror
(
request
,
u'此IDC不存在'
)
return
HttpResponseRedirect
(
'/jasset/idc_list/?id=
%
s'
%
idc_id
)
return
my_render
(
'jasset/idc_edit.html'
,
locals
(),
request
)
if
not
use_default_auth
:
@require_admin
username
=
request
.
POST
.
get
(
'username'
)
def
idc_detail
(
request
):
password
=
request
.
POST
.
get
(
'password'
)
""" IDC详情 """
if
password
==
asset
.
password
:
header_title
,
path1
,
path2
=
u'IDC详情'
,
u'资产管理'
,
u'IDC详情'
password_encode
=
password
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc_filter
=
IDC
.
objects
.
filter
(
id
=
idc_id
)
if
idc_filter
:
idc
=
idc_filter
[
0
]
else
:
else
:
return
httperror
(
request
,
'没有此IDC'
)
password_encode
=
CRYPTOR
.
encrypt
(
password
)
dept
=
get_session_user_info
(
request
)[
5
]
if
is_super_user
(
request
):
posts
=
Asset
.
objects
.
filter
(
idc
=
idc
)
.
order_by
(
'ip'
)
elif
is_group_admin
(
request
):
posts
=
Asset
.
objects
.
filter
(
idc
=
idc
,
dept
=
dept
)
.
order_by
(
'ip'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
my_render
(
'jasset/idc_detail.html'
,
locals
(),
request
)
@require_super_user
def
idc_del
(
request
):
""" 删除IDC """
offset
=
request
.
GET
.
get
(
'id'
,
''
)
if
offset
==
'multi'
:
len_list
=
request
.
POST
.
get
(
"len_list"
)
for
i
in
range
(
int
(
len_list
)):
key
=
"id_list["
+
str
(
i
)
+
"]"
idc_id
=
request
.
POST
.
get
(
key
)
db_idc_delete
(
request
,
int
(
idc_id
))
else
:
else
:
db_idc_delete
(
request
,
int
(
offset
))
username
=
None
return
HttpResponseRedirect
(
'/jasset/idc_list/'
)
password_encode
=
None
@require_admin
def
group_add
(
request
):
""" 添加主机组 """
header_title
,
path1
,
path2
=
u'添加主机组'
,
u'资产管理'
,
u'添加主机组'
if
is_super_user
(
request
):
posts
=
Asset
.
objects
.
all
()
edept
=
DEPT
.
objects
.
all
()
elif
is_group_admin
(
request
):
dept_id
=
get_user_dept
(
request
)
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
posts
=
Asset
.
objects
.
filter
(
dept
=
dept
)
edept
=
get_session_user_info
(
request
)[
5
]
if
request
.
method
==
'POST'
:
j_group
=
request
.
POST
.
get
(
'j_group'
,
''
)
j_dept
=
request
.
POST
.
get
(
'j_dept'
,
''
)
j_hosts
=
request
.
POST
.
getlist
(
'j_hosts'
,
''
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
,
''
)
try
:
try
:
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset
=
j_hosts
,
edept
=
[
j_dept
]):
asset_test
=
get_object
(
Asset
,
ip
=
ip
)
emg
=
u'添加失败, 您无权操作!'
if
asset_test
and
asset_id
!=
str
(
asset_test
.
id
):
raise
RaiseError
error
=
u'该IP
%
s 已存在!'
%
ip
raise
ServerError
(
error
)
elif
BisGroup
.
objects
.
filter
(
name
=
j_group
):
except
ServerError
:
emg
=
u'添加失败, 该主机组已存在!'
raise
RaiseError
except
RaiseError
:
pass
pass
else
:
j_dept
=
DEPT
.
objects
.
filter
(
id
=
j_dept
)[
0
]
group
=
BisGroup
.
objects
.
create
(
name
=
j_group
,
dept
=
j_dept
,
comment
=
j_comment
)
for
host
in
j_hosts
:
g
=
Asset
.
objects
.
get
(
id
=
host
)
group
.
asset_set
.
add
(
g
)
smg
=
u'主机组
%
s 添加成功'
%
j_group
return
my_render
(
'jasset/group_add.html'
,
locals
(),
request
)
@require_admin
def
group_list
(
request
):
""" 列出主机组 """
header_title
,
path1
,
path2
=
u'查看主机组'
,
u'资产管理'
,
u'查看主机组'
dept_id
=
get_user_dept
(
request
)
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
gid
=
request
.
GET
.
get
(
'gid'
)
sid
=
request
.
GET
.
get
(
'sid'
)
if
gid
:
if
is_common_user
(
request
):
return
httperror
(
request
,
u'您无权查看!'
)
elif
is_group_admin
(
request
)
and
not
validate
(
request
,
user_group
=
[
gid
]):
return
httperror
(
request
,
u'您无权查看!'
)
posts
=
[]
user_group
=
UserGroup
.
objects
.
filter
(
id
=
gid
)
if
user_group
:
user_group
=
user_group
[
0
]
perms
=
Perm
.
objects
.
filter
(
user_group
=
user_group
)
for
perm
in
perms
:
posts
.
append
(
perm
.
asset_group
)
elif
sid
:
if
is_common_user
(
request
):
return
httperror
(
request
,
u'您无权查看!'
)
elif
is_group_admin
(
request
)
and
not
validate
(
request
,
user_group
=
[
sid
]):
return
httperror
(
request
,
u'您无权查看!'
)
posts
=
[]
user_group
=
UserGroup
.
objects
.
filter
(
id
=
sid
)
if
user_group
:
user_group
=
user_group
[
0
]
for
perm
in
user_group
.
sudoperm_set
.
all
():
posts
.
extend
(
perm
.
asset_group
.
all
())
posts
=
list
(
set
(
posts
))
else
:
return
httperror
(
request
,
u'没有此sudo授权!'
)
else
:
if
is_super_user
(
request
):
if
keyword
:
posts
=
BisGroup
.
objects
.
exclude
(
name
=
'ALL'
)
.
filter
(
Q
(
name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
else
:
posts
=
BisGroup
.
objects
.
exclude
(
name
=
'ALL'
)
.
order_by
(
'id'
)
elif
is_group_admin
(
request
):
if
keyword
:
posts
=
BisGroup
.
objects
.
filter
(
Q
(
name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
.
filter
(
dept
=
dept
)
else
:
posts
=
BisGroup
.
objects
.
filter
(
dept
=
dept
)
.
order_by
(
'id'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
my_render
(
'jasset/group_list.html'
,
locals
(),
request
)
@require_admin
def
group_edit
(
request
):
""" 修改主机组 """
header_title
,
path1
,
path2
=
u'编辑主机组'
,
u'资产管理'
,
u'编辑主机组'
group_id
=
request
.
GET
.
get
(
'id'
,
''
)
group
=
BisGroup
.
objects
.
filter
(
id
=
group_id
)
if
group
:
group
=
group
[
0
]
else
:
httperror
(
request
,
u'没有这个主机组!'
)
host_all
=
Asset
.
objects
.
all
()
dept_id
=
get_session_user_info
(
request
)[
3
]
eposts
=
Asset
.
objects
.
filter
(
bis_group
=
group
)
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset_group
=
[
group_id
]):
return
httperror
(
request
,
'编辑失败, 您无权操作!'
)
dept
=
DEPT
.
objects
.
filter
(
id
=
group
.
dept
.
id
)
if
dept
:
dept
=
dept
[
0
]
else
:
return
httperror
(
request
,
u'没有这个部门!'
)
all_dept
=
dept
.
asset_set
.
all
()
posts
=
[
g
for
g
in
all_dept
if
g
not
in
eposts
]
if
request
.
method
==
'POST'
:
j_group
=
request
.
POST
.
get
(
'j_group'
,
''
)
j_hosts
=
request
.
POST
.
getlist
(
'j_hosts'
,
''
)
j_dept
=
request
.
POST
.
get
(
'j_dept'
,
''
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
,
''
)
j_dept
=
DEPT
.
objects
.
filter
(
id
=
int
(
j_dept
))
j_dept
=
j_dept
[
0
]
group
.
asset_set
.
clear
()
for
host
in
j_hosts
:
g
=
Asset
.
objects
.
get
(
id
=
host
)
group
.
asset_set
.
add
(
g
)
BisGroup
.
objects
.
filter
(
id
=
group_id
)
.
update
(
name
=
j_group
,
dept
=
j_dept
,
comment
=
j_comment
)
smg
=
u'主机组
%
s修改成功'
%
j_group
return
HttpResponseRedirect
(
'/jasset/group_list'
)
return
my_render
(
'jasset/group_edit.html'
,
locals
(),
request
)
@require_admin
def
group_detail
(
request
):
""" 主机组详情 """
header_title
,
path1
,
path2
=
u'主机组详情'
,
u'资产管理'
,
u'主机组详情'
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
dept
=
get_session_user_info
(
request
)[
5
]
group_id
=
request
.
GET
.
get
(
'id'
,
''
)
group
=
BisGroup
.
objects
.
get
(
id
=
group_id
)
if
is_super_user
(
request
):
posts
=
Asset
.
objects
.
filter
(
bis_group
=
group
)
.
order_by
(
'ip'
)
elif
is_group_admin
(
request
):
if
not
validate
(
request
,
asset_group
=
[
group_id
]):
return
httperror
(
request
,
u'您无权查看!'
)
posts
=
Asset
.
objects
.
filter
(
bis_group
=
group
)
.
filter
(
dept
=
dept
)
.
order_by
(
'ip'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
my_render
(
'jasset/group_detail.html'
,
locals
(),
request
)
@require_admin
def
group_del_host
(
request
):
""" 主机组中剔除主机, 并不删除真实主机 """
if
request
.
method
==
'POST'
:
group_id
=
request
.
POST
.
get
(
'group_id'
)
offset
=
request
.
GET
.
get
(
'id'
,
''
)
group
=
BisGroup
.
objects
.
get
(
id
=
group_id
)
if
offset
==
'group'
:
len_list
=
request
.
POST
.
get
(
"len_list"
)
for
i
in
range
(
int
(
len_list
)):
key
=
"id_list["
+
str
(
i
)
+
"]"
jid
=
request
.
POST
.
get
(
key
)
g
=
Asset
.
objects
.
get
(
id
=
jid
)
group
.
asset_set
.
remove
(
g
)
else
:
offset
=
request
.
GET
.
get
(
'id'
,
''
)
group_id
=
request
.
GET
.
get
(
'gid'
,
''
)
group
=
BisGroup
.
objects
.
get
(
id
=
group_id
)
g
=
Asset
.
objects
.
get
(
id
=
offset
)
group
.
asset_set
.
remove
(
g
)
return
HttpResponseRedirect
(
'/jasset/group_detail/?id=
%
s'
%
group
.
id
)
@require_admin
def
group_del
(
request
):
""" 删除主机组 """
offset
=
request
.
GET
.
get
(
'id'
,
''
)
if
offset
==
'multi'
:
len_list
=
request
.
POST
.
get
(
"len_list"
)
for
i
in
range
(
int
(
len_list
)):
key
=
"id_list["
+
str
(
i
)
+
"]"
gid
=
request
.
POST
.
get
(
key
)
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset_group
=
[
gid
]):
return
httperror
(
request
,
'删除失败, 您无权删除!'
)
BisGroup
.
objects
.
filter
(
id
=
gid
)
.
delete
()
else
:
else
:
gid
=
int
(
offset
)
db_asset_update
(
id
=
asset_id
,
ip
=
ip
,
port
=
port
,
use_default_auth
=
use_default_auth
,
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset_group
=
[
gid
]):
username
=
username
,
password
=
password_encode
,
return
httperror
(
request
,
'删除失败, 您无权删除!'
)
is_active
=
is_active
,
comment
=
comment
)
BisGroup
.
objects
.
filter
(
id
=
gid
)
.
delete
()
msg
=
u'主机
%
s 修改成功'
%
ip
return
HttpResponseRedirect
(
'/jasset/group_list/'
)
return
HttpResponseRedirect
(
'/jasset/asset_detail/?id=
%
s'
%
asset_id
)
return
my_render
(
'jasset/asset_edit.html'
,
locals
(),
request
)
@require_admin
def
dept_host_ajax
(
request
):
""" 添加主机组时, 部门联动主机异步 """
# @require_role(role='admin')
dept_id
=
request
.
GET
.
get
(
'id'
,
''
)
# def host_edit_adm(request):
if
dept_id
not
in
[
'1'
,
'2'
]:
# """ 部门管理员修改主机 """
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
# header_title, path1, path2 = u'修改主机', u'资产管理', u'修改主机'
if
dept
:
# actives = {1: u'激活', 0: u'禁用'}
dept
=
dept
[
0
]
# login_types = {'L': 'LDAP', 'M': 'MAP'}
hosts
=
dept
.
asset_set
.
all
()
# eidc = IDC.objects.all()
else
:
# dept = get_session_user_info(request)[5]
hosts
=
Asset
.
objects
.
all
()
# egroup = BisGroup.objects.exclude(name='ALL').filter(dept=dept)
# host_id = request.GET.get('id', '')
return
my_render
(
'jasset/dept_host_ajax.html'
,
locals
(),
request
)
# post = Asset.objects.filter(id=int(host_id))
# if post:
# post = post[0]
def
show_all_ajax
(
request
):
# else:
""" 批量修改主机时, 部门和组全部显示 """
# return httperror(request, '没有此主机!')
env
=
request
.
GET
.
get
(
'env'
,
''
)
#
get_id
=
request
.
GET
.
get
(
'id'
,
''
)
# e_group = post.bis_group.all()
host
=
Asset
.
objects
.
filter
(
id
=
get_id
)
#
if
host
:
# if request.method == 'POST':
host
=
host
[
0
]
# j_ip = request.POST.get('j_ip')
return
my_render
(
'jasset/show_all_ajax.html'
,
locals
(),
request
)
# j_idc = request.POST.get('j_idc')
# j_port = request.POST.get('j_port')
# j_type = request.POST.get('j_type')
@require_login
# j_dept = request.POST.getlist('j_dept')
def
host_search
(
request
):
# j_group = request.POST.getlist('j_group')
""" 搜索主机 """
# j_active = request.POST.get('j_active')
keyword
=
request
.
GET
.
get
(
'keyword'
)
# j_comment = request.POST.get('j_comment')
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
#
dept
=
get_session_user_info
(
request
)[
5
]
# host_info = [j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment]
post_all
=
Asset
.
objects
.
filter
(
Q
(
ip__contains
=
keyword
)
|
#
Q
(
idc__name__contains
=
keyword
)
|
# if not validate(request, asset_group=j_group, edept=j_dept):
Q
(
bis_group__name__contains
=
keyword
)
|
# emg = u'修改失败,您无权操作!'
Q
(
comment__contains
=
keyword
))
.
distinct
()
.
order_by
(
'ip'
)
# return my_render('jasset/asset_edit.html', locals(), request)
if
is_super_user
(
request
):
#
posts
=
post_all
# if j_type == 'M':
# j_user = request.POST.get('j_user')
elif
is_group_admin
(
request
):
# j_password = request.POST.get('j_password')
posts
=
post_all
.
filter
(
dept
=
dept
)
# db_host_update(host_info, j_user, j_password, post)
# else:
elif
is_common_user
(
request
):
# db_host_update(host_info, post)
user_id
,
username
=
get_session_user_info
(
request
)[
0
:
2
]
#
post_perm
=
user_perm_asset_api
(
username
)
# smg = u'主机 %s 修改成功' % j_ip
posts
=
list
(
set
(
post_all
)
&
set
(
post_perm
))
# return HttpResponseRedirect('/jasset/host_detail/?id=%s' % host_id)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
#
# return my_render('jasset/asset_edit.html', locals(), request)
return
my_render
(
'jasset/host_search.html'
,
locals
(),
request
)
\ No newline at end of file
@require_role
(
'admin'
)
def
asset_detail
(
request
):
""" 主机详情 """
header_title
,
path1
,
path2
=
u'主机详细信息'
,
u'资产管理'
,
u'主机详情'
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
asset
=
get_object
(
Asset
,
id
=
asset_id
)
return
my_render
(
'jasset/asset_detail.html'
,
locals
(),
request
)
#
#
# @require_admin
# def group_edit(request):
# """ 修改主机组 """
# header_title, path1, path2 = u'编辑主机组', u'资产管理', u'编辑主机组'
# group_id = request.GET.get('id', '')
# group = BisGroup.objects.filter(id=group_id)
# if group:
# group = group[0]
# else:
# httperror(request, u'没有这个主机组!')
#
# host_all = Asset.objects.all()
# dept_id = get_session_user_info(request)[3]
# eposts = Asset.objects.filter(bis_group=group)
#
# if is_group_admin(request) and not validate(request, asset_group=[group_id]):
# return httperror(request, '编辑失败, 您无权操作!')
# dept = DEPT.objects.filter(id=group.dept.id)
# if dept:
# dept = dept[0]
# else:
# return httperror(request, u'没有这个部门!')
#
# all_dept = dept.asset_set.all()
# posts = [g for g in all_dept if g not in eposts]
#
# if request.method == 'POST':
# j_group = request.POST.get('j_group', '')
# j_hosts = request.POST.getlist('j_hosts', '')
# j_dept = request.POST.get('j_dept', '')
# j_comment = request.POST.get('j_comment', '')
#
# j_dept = DEPT.objects.filter(id=int(j_dept))
# j_dept = j_dept[0]
#
# group.asset_set.clear()
# for host in j_hosts:
# g = Asset.objects.get(id=host)
# group.asset_set.add(g)
# BisGroup.objects.filter(id=group_id).update(name=j_group, dept=j_dept, comment=j_comment)
# smg = u'主机组%s修改成功' % j_group
# return HttpResponseRedirect('/jasset/group_list')
#
# return my_render('jasset/group_edit.html', locals(), request)
#
#
# @require_admin
# def group_detail(request):
# """ 主机组详情 """
# header_title, path1, path2 = u'主机组详情', u'资产管理', u'主机组详情'
# login_types = {'L': 'LDAP', 'M': 'MAP'}
# dept = get_session_user_info(request)[5]
# group_id = request.GET.get('id', '')
# group = BisGroup.objects.get(id=group_id)
# if is_super_user(request):
# posts = Asset.objects.filter(bis_group=group).order_by('ip')
#
# elif is_group_admin(request):
# if not validate(request, asset_group=[group_id]):
# return httperror(request, u'您无权查看!')
# posts = Asset.objects.filter(bis_group=group).filter(dept=dept).order_by('ip')
#
# contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
# return my_render('jasset/group_detail.html', locals(), request)
#
#
# @require_admin
# def group_del_host(request):
# """ 主机组中剔除主机, 并不删除真实主机 """
# if request.method == 'POST':
# group_id = request.POST.get('group_id')
# offset = request.GET.get('id', '')
# group = BisGroup.objects.get(id=group_id)
# if offset == 'group':
# len_list = request.POST.get("len_list")
# for i in range(int(len_list)):
# key = "id_list[" + str(i) + "]"
# jid = request.POST.get(key)
# g = Asset.objects.get(id=jid)
# group.asset_set.remove(g)
#
# else:
# offset = request.GET.get('id', '')
# group_id = request.GET.get('gid', '')
# group = BisGroup.objects.get(id=group_id)
# g = Asset.objects.get(id=offset)
# group.asset_set.remove(g)
#
# return HttpResponseRedirect('/jasset/group_detail/?id=%s' % group.id)
#
#
# @require_admin
# def group_del(request):
# """ 删除主机组 """
# offset = request.GET.get('id', '')
# if offset == 'multi':
# len_list = request.POST.get("len_list")
# for i in range(int(len_list)):
# key = "id_list[" + str(i) + "]"
# gid = request.POST.get(key)
# if is_group_admin(request) and not validate(request, asset_group=[gid]):
# return httperror(request, '删除失败, 您无权删除!')
# BisGroup.objects.filter(id=gid).delete()
# else:
# gid = int(offset)
# if is_group_admin(request) and not validate(request, asset_group=[gid]):
# return httperror(request, '删除失败, 您无权删除!')
# BisGroup.objects.filter(id=gid).delete()
# return HttpResponseRedirect('/jasset/group_list/')
#
#
# @require_admin
# def dept_host_ajax(request):
# """ 添加主机组时, 部门联动主机异步 """
# dept_id = request.GET.get('id', '')
# if dept_id not in ['1', '2']:
# dept = DEPT.objects.filter(id=dept_id)
# if dept:
# dept = dept[0]
# hosts = dept.asset_set.all()
# else:
# hosts = Asset.objects.all()
#
# return my_render('jasset/dept_host_ajax.html', locals(), request)
#
#
# def show_all_ajax(request):
# """ 批量修改主机时, 部门和组全部显示 """
# env = request.GET.get('env', '')
# get_id = request.GET.get('id', '')
# host = Asset.objects.filter(id=get_id)
# if host:
# host = host[0]
# return my_render('jasset/show_all_ajax.html', locals(), request)
#
#
# @require_login
# def host_search(request):
# """ 搜索主机 """
# keyword = request.GET.get('keyword')
# login_types = {'L': 'LDAP', 'M': 'MAP'}
# dept = get_session_user_info(request)[5]
# post_all = Asset.objects.filter(Q(ip__contains=keyword) |
# Q(idc__name__contains=keyword) |
# Q(bis_group__name__contains=keyword) |
# Q(comment__contains=keyword)).distinct().order_by('ip')
# if is_super_user(request):
# posts = post_all
#
# elif is_group_admin(request):
# posts = post_all.filter(dept=dept)
#
# elif is_common_user(request):
# user_id, username = get_session_user_info(request)[0:2]
# post_perm = user_perm_asset_api(username)
# posts = list(set(post_all) & set(post_perm))
# contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
#
# return my_render('jasset/host_search.html', locals(), request)
\ No newline at end of file
jperm/models.py
View file @
8bf9103f
...
@@ -4,12 +4,12 @@ from uuidfield import UUIDField
...
@@ -4,12 +4,12 @@ from uuidfield import UUIDField
from
django.db
import
models
from
django.db
import
models
from
juser.models
import
UserGroup
from
juser.models
import
UserGroup
from
jasset.models
import
Asset
,
Bis
Group
from
jasset.models
import
Asset
,
Asset
Group
class
Perm
(
models
.
Model
):
class
Perm
(
models
.
Model
):
user_group
=
models
.
ForeignKey
(
UserGroup
)
user_group
=
models
.
ForeignKey
(
UserGroup
)
asset_group
=
models
.
ForeignKey
(
Bis
Group
)
asset_group
=
models
.
ForeignKey
(
Asset
Group
)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
'
%
s_
%
s'
%
(
self
.
user_group
.
name
,
self
.
asset_group
.
name
)
return
'
%
s_
%
s'
%
(
self
.
user_group
.
name
,
self
.
asset_group
.
name
)
...
@@ -27,7 +27,7 @@ class CmdGroup(models.Model):
...
@@ -27,7 +27,7 @@ class CmdGroup(models.Model):
class
SudoPerm
(
models
.
Model
):
class
SudoPerm
(
models
.
Model
):
user_group
=
models
.
ForeignKey
(
UserGroup
)
user_group
=
models
.
ForeignKey
(
UserGroup
)
user_runas
=
models
.
CharField
(
max_length
=
100
)
user_runas
=
models
.
CharField
(
max_length
=
100
)
asset_group
=
models
.
ManyToManyField
(
Bis
Group
)
asset_group
=
models
.
ManyToManyField
(
Asset
Group
)
cmd_group
=
models
.
ManyToManyField
(
CmdGroup
)
cmd_group
=
models
.
ManyToManyField
(
CmdGroup
)
comment
=
models
.
CharField
(
max_length
=
30
,
null
=
True
,
blank
=
True
)
comment
=
models
.
CharField
(
max_length
=
30
,
null
=
True
,
blank
=
True
)
...
...
jumpserver/api.py
View file @
8bf9103f
...
@@ -17,7 +17,7 @@ from django.core.paginator import Paginator, EmptyPage, InvalidPage
...
@@ -17,7 +17,7 @@ from django.core.paginator import Paginator, EmptyPage, InvalidPage
from
django.http
import
HttpResponse
,
Http404
from
django.http
import
HttpResponse
,
Http404
from
django.template
import
RequestContext
from
django.template
import
RequestContext
from
juser.models
import
User
,
UserGroup
from
juser.models
import
User
,
UserGroup
from
jasset.models
import
Asset
,
BisGroup
,
IDC
from
jasset.models
import
Asset
,
AssetGroup
from
jlog.models
import
Log
from
jlog.models
import
Log
from
jasset.models
import
AssetAlias
from
jasset.models
import
AssetAlias
from
django.core.exceptions
import
ObjectDoesNotExist
,
MultipleObjectsReturned
from
django.core.exceptions
import
ObjectDoesNotExist
,
MultipleObjectsReturned
...
@@ -177,6 +177,7 @@ def pages(post_objects, request):
...
@@ -177,6 +177,7 @@ def pages(post_objects, request):
else
:
else
:
show_end
=
0
show_end
=
0
# 所有对象, 分页器, 本页对象, 所有页码, 本页页码,是否显示第一页,是否显示最后一页
return
post_objects
,
paginator
,
page_objects
,
page_range
,
current_page
,
show_first
,
show_end
return
post_objects
,
paginator
,
page_objects
,
page_range
,
current_page
,
show_first
,
show_end
...
@@ -429,7 +430,7 @@ class PyCrypt(object):
...
@@ -429,7 +430,7 @@ class PyCrypt(object):
"""
"""
return
crypt
.
crypt
(
password
,
'$6$
%
s$'
%
salt
)
return
crypt
.
crypt
(
password
,
'$6$
%
s$'
%
salt
)
def
encrypt
(
self
,
passwd
=
None
):
def
encrypt
(
self
,
passwd
=
None
,
length
=
32
):
"""
"""
encrypt gen password
encrypt gen password
对称加密之加密生成密码
对称加密之加密生成密码
...
@@ -438,7 +439,6 @@ class PyCrypt(object):
...
@@ -438,7 +439,6 @@ class PyCrypt(object):
passwd
=
self
.
random_pass
()
passwd
=
self
.
random_pass
()
cryptor
=
AES
.
new
(
self
.
key
,
self
.
mode
,
b
'8122ca7d906ad5e1'
)
cryptor
=
AES
.
new
(
self
.
key
,
self
.
mode
,
b
'8122ca7d906ad5e1'
)
length
=
64
try
:
try
:
count
=
len
(
passwd
)
count
=
len
(
passwd
)
except
TypeError
:
except
TypeError
:
...
...
jumpserver/settings.py
View file @
8bf9103f
...
@@ -56,8 +56,8 @@ INSTALLED_APPS = (
...
@@ -56,8 +56,8 @@ INSTALLED_APPS = (
'django.contrib.humanize'
,
'django.contrib.humanize'
,
'jumpserver'
,
'jumpserver'
,
'juser'
,
'juser'
,
#
'jasset',
'jasset'
,
#
'jperm',
'jperm'
,
# 'jlog',
# 'jlog',
)
)
...
...
jumpserver/templatetags/mytags.py
View file @
8bf9103f
...
@@ -12,21 +12,28 @@ from jasset.models import AssetAlias
...
@@ -12,21 +12,28 @@ from jasset.models import AssetAlias
register
=
template
.
Library
()
register
=
template
.
Library
()
@register.filter
(
name
=
'stamp2str'
)
#
@register.filter(name='stamp2str')
def
stamp2str
(
value
):
#
def stamp2str(value):
try
:
#
try:
return
time
.
strftime
(
'
%
Y/
%
m/
%
d
%
H:
%
M:
%
S'
,
time
.
localtime
(
value
))
#
return time.strftime('%Y/%m/%d %H:%M:%S', time.localtime(value))
except
AttributeError
:
#
except AttributeError:
return
'0000/00/00 00:00:00'
#
return '0000/00/00 00:00:00'
@register.filter
(
name
=
'int2str'
)
@register.filter
(
name
=
'int2str'
)
def
int2str
(
value
):
def
int2str
(
value
):
"""
int 转换为 str
"""
return
str
(
value
)
return
str
(
value
)
@register.filter
(
name
=
'get_role'
)
@register.filter
(
name
=
'get_role'
)
def
get_role
(
user_id
):
def
get_role
(
user_id
):
"""
根据用户id获取用户权限
"""
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
user
=
get_object
(
User
,
id
=
user_id
)
user
=
get_object
(
User
,
id
=
user_id
)
if
user
:
if
user
:
...
@@ -35,66 +42,69 @@ def get_role(user_id):
...
@@ -35,66 +42,69 @@ def get_role(user_id):
return
u"普通用户"
return
u"普通用户"
@register.filter
(
name
=
'groups_str'
)
#
@register.filter(name='groups_str')
def
groups_str
(
user_id
):
#
def groups_str(user_id):
groups
=
[]
#
groups = []
user
=
User
.
objects
.
get
(
id
=
user_id
)
#
user = User.objects.get(id=user_id)
for
group
in
user
.
group
.
all
():
#
for group in user.group.all():
groups
.
append
(
group
.
name
)
#
groups.append(group.name)
if
len
(
groups
)
<
3
:
#
if len(groups) < 3:
return
' '
.
join
(
groups
)
#
return ' '.join(groups)
else
:
#
else:
return
"
%
s ..."
%
' '
.
join
(
groups
[
0
:
2
])
#
return "%s ..." % ' '.join(groups[0:2])
#
@register.filter
(
name
=
'group_str2'
)
@register.filter
(
name
=
'group_str2'
)
def
groups_str2
(
group_list
):
def
groups_str2
(
group_list
):
"""
将用户组列表转换为str
"""
if
len
(
group_list
)
<
3
:
if
len
(
group_list
)
<
3
:
return
' '
.
join
([
group
.
name
for
group
in
group_list
])
return
' '
.
join
([
group
.
name
for
group
in
group_list
])
else
:
else
:
return
'
%
s ...'
%
' '
.
join
([
group
.
name
for
group
in
group_list
[
0
:
2
]])
return
'
%
s ...'
%
' '
.
join
([
group
.
name
for
group
in
group_list
[
0
:
2
]])
#
@register.filter
(
name
=
'group_str2_all'
)
#
@register.filter(name='group_str2_all')
def
group_str2_all
(
group_list
):
#
def group_str2_all(group_list):
group_lis
=
[]
#
group_lis = []
for
i
in
group_list
:
#
for i in group_list:
if
str
(
i
)
!=
'ALL'
:
#
if str(i) != 'ALL':
group_lis
.
append
(
i
)
#
group_lis.append(i)
if
len
(
group_lis
)
<
3
:
#
if len(group_lis) < 3:
return
' '
.
join
([
group
.
name
for
group
in
group_lis
])
#
return ' '.join([group.name for group in group_lis])
else
:
#
else:
return
'
%
s ...'
%
' '
.
join
([
group
.
name
for
group
in
group_lis
[
0
:
2
]])
#
return '%s ...' % ' '.join([group.name for group in group_lis[0:2]])
#
#
@register.filter
(
name
=
'group_dept_all'
)
#
@register.filter(name='group_dept_all')
def
group_dept_all
(
group_list
):
#
def group_dept_all(group_list):
group_lis
=
[]
#
group_lis = []
for
i
in
group_list
:
#
for i in group_list:
if
str
(
i
)
!=
'ALL'
:
#
if str(i) != 'ALL':
group_lis
.
append
(
i
)
#
group_lis.append(i)
return
' '
.
join
([
group
.
name
for
group
in
group_lis
])
#
return ' '.join([group.name for group in group_lis])
#
#
@register.filter
(
name
=
'group_manage_str'
)
#
@register.filter(name='group_manage_str')
def
group_manage_str
(
username
):
#
def group_manage_str(username):
user
=
User
.
objects
.
get
(
username
=
username
)
#
user = User.objects.get(username=username)
group
=
user
.
user_group
.
filter
(
type
=
'M'
)
#
group = user.user_group.filter(type='M')
if
group
:
#
if group:
return
group
[
0
]
.
name
#
return group[0].name
else
:
#
else:
return
''
#
return ''
#
#
@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
=
'get_login_type'
)
#
@register.filter(name='get_login_type')
def
get_login_type
(
login
):
#
def get_login_type(login):
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
#
login_types = {'L': 'LDAP', 'M': 'MAP'}
return
login_types
[
login
]
#
return login_types[login]
@register.filter
(
name
=
'bool2str'
)
@register.filter
(
name
=
'bool2str'
)
...
@@ -105,169 +115,171 @@ def bool2str(value):
...
@@ -105,169 +115,171 @@ def bool2str(value):
return
u'否'
return
u'否'
# @register.filter(name='user_readonly')
#
#
@register.filter(name='user_readonly')
# def user_readonly(user_id):
#
#
def user_readonly(user_id):
# user = User.objects.filter(id=user_id)
#
#
user = User.objects.filter(id=user_id)
# if user:
#
#
if user:
# user = user[0]
#
#
user = user[0]
# if user.role == 'CU':
#
#
if user.role == 'CU':
# return False
#
#
return False
# return True
#
#
return True
#
@register.filter
(
name
=
'members_count'
)
@register.filter
(
name
=
'members_count'
)
def
members_count
(
group_id
):
def
members_count
(
group_id
):
"""统计用户组下成员数量"""
group
=
get_object
(
UserGroup
,
id
=
group_id
)
group
=
get_object
(
UserGroup
,
id
=
group_id
)
if
group
:
if
group
:
return
group
.
user_set
.
count
()
return
group
.
user_set
.
count
()
else
:
else
:
return
0
return
0
#
@register.filter
(
name
=
'group_user_count'
)
#
@register.filter(name='group_user_count')
def
group_user_count
(
group_id
):
#
def group_user_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_user_num'
)
#
@register.filter(name='dept_user_num')
def
dept_user_num
(
dept_id
):
#
def dept_user_num(dept_id):
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
#
dept = DEPT.objects.filter(id=dept_id)
if
dept
:
#
if dept:
dept
=
dept
[
0
]
#
dept = dept[0]
return
dept
.
user_set
.
count
()
#
return dept.user_set.count()
else
:
#
else:
return
0
#
return 0
#
#
@register.filter
(
name
=
'dept_group_num'
)
#
@register.filter(name='dept_group_num')
def
dept_group_num
(
dept_id
):
#
def dept_group_num(dept_id):
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
#
dept = DEPT.objects.filter(id=dept_id)
if
dept
:
#
if dept:
dept
=
dept
[
0
]
#
dept = dept[0]
return
dept
.
usergroup_set
.
all
()
.
count
()
#
return dept.usergroup_set.all().count()
else
:
#
else:
return
0
#
return 0
#
#
@register.filter
(
name
=
'perm_count'
)
#
@register.filter(name='perm_count')
def
perm_count
(
group_id
):
#
def perm_count(group_id):
group
=
UserGroup
.
objects
.
get
(
id
=
group_id
)
#
group = UserGroup.objects.get(id=group_id)
return
group
.
perm_set
.
count
()
#
return group.perm_set.count()
#
#
@register.filter
(
name
=
'dept_asset_num'
)
#
@register.filter(name='dept_asset_num')
def
dept_asset_num
(
dept_id
):
#
def dept_asset_num(dept_id):
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
#
dept = DEPT.objects.filter(id=dept_id)
if
dept
:
#
if dept:
dept
=
dept
[
0
]
#
dept = dept[0]
return
dept
.
asset_set
.
all
()
.
count
()
#
return dept.asset_set.all().count()
return
0
#
return 0
#
#
@register.filter
(
name
=
'ugrp_perm_agrp_count'
)
#
@register.filter(name='ugrp_perm_agrp_count')
def
ugrp_perm_agrp_count
(
user_group_id
):
#
def ugrp_perm_agrp_count(user_group_id):
user_group
=
UserGroup
.
objects
.
filter
(
id
=
user_group_id
)
#
user_group = UserGroup.objects.filter(id=user_group_id)
if
user_group
:
#
if user_group:
user_group
=
user_group
[
0
]
#
user_group = user_group[0]
return
user_group
.
perm_set
.
all
()
.
count
()
#
return user_group.perm_set.all().count()
return
0
#
return 0
#
#
@register.filter
(
name
=
'ugrp_sudo_agrp_count'
)
#
@register.filter(name='ugrp_sudo_agrp_count')
def
ugrp_sudo_agrp_count
(
user_group_id
):
#
def ugrp_sudo_agrp_count(user_group_id):
user_group
=
UserGroup
.
objects
.
filter
(
id
=
user_group_id
)
#
user_group = UserGroup.objects.filter(id=user_group_id)
asset_groups
=
[]
#
asset_groups = []
if
user_group
:
#
if user_group:
user_group
=
user_group
[
0
]
#
user_group = user_group[0]
for
perm
in
user_group
.
sudoperm_set
.
all
():
#
for perm in user_group.sudoperm_set.all():
asset_groups
.
extend
(
perm
.
asset_group
.
all
())
#
asset_groups.extend(perm.asset_group.all())
return
len
(
set
(
asset_groups
))
#
return len(set(asset_groups))
return
0
#
return 0
#
#
@register.filter
(
name
=
'ugrp_perm_asset_count'
)
#
@register.filter(name='ugrp_perm_asset_count')
def
ugrp_perm_asset_count
(
user_group_id
):
#
def ugrp_perm_asset_count(user_group_id):
user_group
=
UserGroup
.
objects
.
filter
(
id
=
user_group_id
)
#
user_group = UserGroup.objects.filter(id=user_group_id)
assets
=
[]
#
assets = []
if
user_group
:
#
if user_group:
user_group
=
user_group
[
0
]
#
user_group = user_group[0]
asset_groups
=
[
perm
.
asset_group
for
perm
in
user_group
.
perm_set
.
all
()]
#
asset_groups = [perm.asset_group for perm in user_group.perm_set.all()]
for
asset_group
in
asset_groups
:
#
for asset_group in asset_groups:
assets
.
extend
(
asset_group
.
asset_set
.
all
())
#
assets.extend(asset_group.asset_set.all())
return
len
(
set
(
assets
))
#
return len(set(assets))
#
#
@register.filter
(
name
=
'ugrp_sudo_asset_count'
)
#
@register.filter(name='ugrp_sudo_asset_count')
def
ugrp_sudo_asset_count
(
user_group_id
):
#
def ugrp_sudo_asset_count(user_group_id):
user_group
=
UserGroup
.
objects
.
filter
(
id
=
user_group_id
)
#
user_group = UserGroup.objects.filter(id=user_group_id)
asset_groups
=
[]
#
asset_groups = []
assets
=
[]
#
assets = []
if
user_group
:
#
if user_group:
user_group
=
user_group
[
0
]
#
user_group = user_group[0]
for
perm
in
user_group
.
sudoperm_set
.
all
():
#
for perm in user_group.sudoperm_set.all():
asset_groups
.
extend
(
perm
.
asset_group
.
all
())
#
asset_groups.extend(perm.asset_group.all())
#
for
asset_group
in
asset_groups
:
#
for asset_group in asset_groups:
assets
.
extend
(
asset_group
.
asset_set
.
all
())
#
assets.extend(asset_group.asset_set.all())
return
len
(
set
(
assets
))
#
return len(set(assets))
#
#
@register.filter
(
name
=
'get_user_alias'
)
#
@register.filter(name='get_user_alias')
def
get_user_alias
(
post
,
user_id
):
#
def get_user_alias(post, user_id):
user
=
User
.
objects
.
get
(
id
=
user_id
)
#
user = User.objects.get(id=user_id)
host
=
Asset
.
objects
.
get
(
id
=
post
.
id
)
#
host = Asset.objects.get(id=post.id)
alias
=
AssetAlias
.
objects
.
filter
(
user
=
user
,
host
=
host
)
#
alias = AssetAlias.objects.filter(user=user, host=host)
if
alias
:
#
if alias:
return
alias
[
0
]
.
alias
#
return alias[0].alias
else
:
#
else:
return
''
#
return ''
#
#
@register.filter
(
name
=
'group_type_to_str'
)
#
@register.filter(name='group_type_to_str')
def
group_type_to_str
(
type_name
):
#
def group_type_to_str(type_name):
group_types
=
{
#
group_types = {
'P'
:
'用户'
,
#
'P': '用户',
'M'
:
'部门'
,
#
'M': '部门',
'A'
:
'用户组'
,
#
'A': '用户组',
}
#
}
return
group_types
.
get
(
type_name
)
#
return group_types.get(type_name)
#
#
@register.filter
(
name
=
'ast_to_list'
)
#
@register.filter(name='ast_to_list')
def
ast_to_list
(
lis
):
#
def ast_to_list(lis):
ast_lis
=
ast
.
literal_eval
(
lis
)
#
ast_lis = ast.literal_eval(lis)
if
len
(
ast_lis
)
<=
2
:
#
if len(ast_lis) <= 2:
return
','
.
join
([
i
for
i
in
ast_lis
])
#
return ','.join([i for i in ast_lis])
else
:
#
else:
restr
=
','
.
join
([
i
for
i
in
ast_lis
[
0
:
2
]])
+
'...'
#
restr = ','.join([i for i in ast_lis[0:2]]) + '...'
return
restr
#
return restr
#
#
@register.filter
(
name
=
'get_group_count'
)
#
@register.filter(name='get_group_count')
def
get_group_count
(
post
,
dept
):
#
def get_group_count(post, dept):
count
=
post
.
asset_set
.
filter
(
dept
=
dept
)
.
count
()
#
count = post.asset_set.filter(dept=dept).count()
return
count
#
return count
#
#
@register.filter
(
name
=
'get_idc_count'
)
#
@register.filter(name='get_idc_count')
def
get_idc_count
(
post
,
dept
):
#
def get_idc_count(post, dept):
count
=
post
.
asset_set
.
filter
(
dept
=
dept
)
.
count
()
#
count = post.asset_set.filter(dept=dept).count()
return
count
#
return count
#
#
@register.filter
(
name
=
'ast_to_list_1'
)
#
@register.filter(name='ast_to_list_1')
def
ast_to_list_1
(
lis
):
#
def ast_to_list_1(lis):
return
ast
.
literal_eval
(
lis
)
#
return ast.literal_eval(lis)
#
#
@register.filter
(
name
=
'string_length'
)
#
@register.filter(name='string_length')
def
string_length
(
string
,
length
):
#
def string_length(string, length):
return
'
%
s ...'
%
string
[
0
:
length
]
#
return '%s ...' % string[0:length]
@register.filter
(
name
=
'to_name'
)
@register.filter
(
name
=
'to_name'
)
def
to_name
(
user_id
):
def
to_name
(
user_id
):
"""user id 转位用户名称"""
try
:
try
:
user
=
User
.
objects
.
filter
(
id
=
int
(
user_id
))
user
=
User
.
objects
.
filter
(
id
=
int
(
user_id
))
if
user
:
if
user
:
...
@@ -277,120 +289,122 @@ def to_name(user_id):
...
@@ -277,120 +289,122 @@ def to_name(user_id):
return
'非法用户'
return
'非法用户'
@register.filter
(
name
=
'to_dept_name'
)
#
@register.filter(name='to_dept_name')
def
to_dept_name
(
user_id
):
#
def to_dept_name(user_id):
try
:
#
try:
user
=
User
.
objects
.
filter
(
id
=
int
(
user_id
))
#
user = User.objects.filter(id=int(user_id))
if
user
:
#
if user:
user
=
user
[
0
]
#
user = user[0]
return
user
.
dept
.
name
#
return user.dept.name
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_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'
)
#
@register.filter(name='get_user_asset_group')
def
get_user_asset_group
(
user
):
#
def get_user_asset_group(user):
return
user
.
get_asset_group
()
#
return user.get_asset_group()
#
#
@register.filter
(
name
=
'group_asset_list'
)
#
@register.filter(name='group_asset_list')
def
group_asset_list
(
group
):
#
def group_asset_list(group):
return
group
.
asset_set
.
all
()
#
return group.asset_set.all()
#
#
@register.filter
(
name
=
'group_asset_list_count'
)
#
@register.filter(name='group_asset_list_count')
def
group_asset_list_count
(
group
):
#
def group_asset_list_count(group):
return
group
.
asset_set
.
all
()
.
count
()
#
return group.asset_set.all().count()
#
#
@register.filter
(
name
=
'time_delta'
)
#
@register.filter(name='time_delta')
def
time_delta
(
time_before
):
#
def time_delta(time_before):
delta
=
datetime
.
datetime
.
now
()
-
time_before
#
delta = datetime.datetime.now() - time_before
days
=
delta
.
days
#
days = delta.days
if
days
:
#
if days:
return
"
%
s 天前"
%
days
#
return "%s 天前" % days
else
:
#
else:
hours
=
delta
.
seconds
/
3600
#
hours = delta.seconds/3600
if
hours
:
#
if hours:
return
"
%
s 小时前"
%
hours
#
return "%s 小时前" % hours
else
:
#
else:
mins
=
delta
.
seconds
/
60
#
mins = delta.seconds/60
if
mins
:
#
if mins:
return
'
%
s 分钟前'
%
mins
#
return '%s 分钟前' % mins
else
:
#
else:
return
'
%
s 秒前'
%
delta
.
seconds
#
return '%s 秒前' % delta.seconds
#
#
@register.filter
(
name
=
'sudo_cmd_list'
)
#
@register.filter(name='sudo_cmd_list')
def
sudo_cmd_list
(
cmd_group_id
):
#
def sudo_cmd_list(cmd_group_id):
cmd_group
=
CmdGroup
.
objects
.
filter
(
id
=
cmd_group_id
)
#
cmd_group = CmdGroup.objects.filter(id=cmd_group_id)
if
cmd_group
:
#
if cmd_group:
cmd_group
=
cmd_group
[
0
]
#
cmd_group = cmd_group[0]
return
cmd_group
.
cmd
.
split
(
','
)
#
return cmd_group.cmd.split(',')
#
#
@register.filter
(
name
=
'sudo_cmd_count'
)
#
@register.filter(name='sudo_cmd_count')
def
sudo_cmd_count
(
user_group_id
):
#
def sudo_cmd_count(user_group_id):
user_group
=
UserGroup
.
objects
.
filter
(
id
=
user_group_id
)
#
user_group = UserGroup.objects.filter(id=user_group_id)
cmds
=
[]
#
cmds = []
if
user_group
:
#
if user_group:
user_group
=
user_group
[
0
]
#
user_group = user_group[0]
cmd_groups
=
[]
#
cmd_groups = []
#
for
perm
in
user_group
.
sudoperm_set
.
all
():
#
for perm in user_group.sudoperm_set.all():
cmd_groups
.
extend
(
perm
.
cmd_group
.
all
())
#
cmd_groups.extend(perm.cmd_group.all())
#
for
cmd_group
in
cmd_groups
:
#
for cmd_group in cmd_groups:
cmds
.
extend
(
cmd_group
.
cmd
.
split
(
','
))
#
cmds.extend(cmd_group.cmd.split(','))
return
len
(
set
(
cmds
))
#
return len(set(cmds))
#
else
:
#
else:
return
0
#
return 0
#
#
@register.filter
(
name
=
'sudo_cmd_count'
)
#
@register.filter(name='sudo_cmd_count')
def
sudo_cmd_count
(
user_group_id
):
#
def sudo_cmd_count(user_group_id):
user_group
=
UserGroup
.
objects
.
filter
(
id
=
user_group_id
)
#
user_group = UserGroup.objects.filter(id=user_group_id)
cmds
=
[]
#
cmds = []
if
user_group
:
#
if user_group:
user_group
=
user_group
[
0
]
#
user_group = user_group[0]
cmd_groups
=
[]
#
cmd_groups = []
for
perm
in
user_group
.
sudoperm_set
.
all
():
#
for perm in user_group.sudoperm_set.all():
cmd_groups
.
extend
(
perm
.
cmd_group
.
all
())
#
cmd_groups.extend(perm.cmd_group.all())
#
for
cmd_group
in
cmd_groups
:
#
for cmd_group in cmd_groups:
cmds
.
extend
(
cmd_group
.
cmd
.
split
(
','
))
#
cmds.extend(cmd_group.cmd.split(','))
return
len
(
set
(
cmds
))
#
return len(set(cmds))
else
:
#
else:
return
0
#
return 0
#
#
@register.filter
(
name
=
'sudo_cmd_ids'
)
#
@register.filter(name='sudo_cmd_ids')
def
sudo_cmd_ids
(
user_group_id
):
#
def sudo_cmd_ids(user_group_id):
user_group
=
UserGroup
.
objects
.
filter
(
id
=
user_group_id
)
#
user_group = UserGroup.objects.filter(id=user_group_id)
if
user_group
:
#
if user_group:
user_group
=
user_group
[
0
]
#
user_group = user_group[0]
cmd_groups
=
[]
#
cmd_groups = []
for
perm
in
user_group
.
sudoperm_set
.
all
():
#
for perm in user_group.sudoperm_set.all():
cmd_groups
.
extend
(
perm
.
cmd_group
.
all
())
#
cmd_groups.extend(perm.cmd_group.all())
cmd_ids
=
[
str
(
cmd_group
.
id
)
for
cmd_group
in
cmd_groups
]
#
cmd_ids = [str(cmd_group.id) for cmd_group in cmd_groups]
return
','
.
join
(
cmd_ids
)
#
return ','.join(cmd_ids)
else
:
#
else:
return
'0'
#
return '0'
#
#
@register.filter
(
name
=
'cmd_group_split'
)
#
@register.filter(name='cmd_group_split')
def
cmd_group_split
(
cmd_group
):
#
def cmd_group_split(cmd_group):
return
cmd_group
.
cmd
.
split
(
','
)
#
return cmd_group.cmd.split(',')
jumpserver/urls.py
View file @
8bf9103f
...
@@ -14,7 +14,7 @@ urlpatterns = patterns('',
...
@@ -14,7 +14,7 @@ urlpatterns = patterns('',
(
r'^file/download/$'
,
'jumpserver.views.download'
),
(
r'^file/download/$'
,
'jumpserver.views.download'
),
(
r'^error/$'
,
'jumpserver.views.httperror'
),
(
r'^error/$'
,
'jumpserver.views.httperror'
),
(
r'^juser/'
,
include
(
'juser.urls'
)),
(
r'^juser/'
,
include
(
'juser.urls'
)),
#
(r'^jasset/', include('jasset.urls')),
(
r'^jasset/'
,
include
(
'jasset.urls'
)),
# (r'^jlog/', include('jlog.urls')),
# (r'^jlog/', include('jlog.urls')),
# (r'^jperm/', include('jperm.urls')),
# (r'^jperm/', include('jperm.urls')),
(
r'^node_auth/'
,
'jumpserver.views.node_auth'
),
(
r'^node_auth/'
,
'jumpserver.views.node_auth'
),
...
...
juser/views.py
View file @
8bf9103f
...
@@ -71,7 +71,7 @@ def group_list(request):
...
@@ -71,7 +71,7 @@ def group_list(request):
if
keyword
:
if
keyword
:
user_group_list
=
user_group_list
.
filter
(
Q
(
name__icontains
=
keyword
)
|
Q
(
comment__icontains
=
keyword
))
user_group_list
=
user_group_list
.
filter
(
Q
(
name__icontains
=
keyword
)
|
Q
(
comment__icontains
=
keyword
))
contacts
,
p
,
contact
s
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
user_group_list
,
request
)
user_group_list
,
p
,
user_group
s
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
user_group_list
,
request
)
return
my_render
(
'juser/group_list.html'
,
locals
(),
request
)
return
my_render
(
'juser/group_list.html'
,
locals
(),
request
)
...
@@ -356,18 +356,18 @@ def user_list(request):
...
@@ -356,18 +356,18 @@ def user_list(request):
header_title
,
path1
,
path2
=
'查看用户'
,
'用户管理'
,
'用户列表'
header_title
,
path1
,
path2
=
'查看用户'
,
'用户管理'
,
'用户列表'
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
gid
=
request
.
GET
.
get
(
'gid'
,
''
)
gid
=
request
.
GET
.
get
(
'gid'
,
''
)
contact_list
=
User
.
objects
.
all
()
.
order_by
(
'
name'
)
users_list
=
User
.
objects
.
all
()
.
order_by
(
'user
name'
)
if
gid
:
if
gid
:
user_group
=
UserGroup
.
objects
.
filter
(
id
=
gid
)
user_group
=
UserGroup
.
objects
.
filter
(
id
=
gid
)
if
user_group
:
if
user_group
:
user_group
=
user_group
[
0
]
user_group
=
user_group
[
0
]
contact
_list
=
user_group
.
user_set
.
all
()
users
_list
=
user_group
.
user_set
.
all
()
if
keyword
:
if
keyword
:
contact_list
=
contact_list
.
filter
(
Q
(
username__icontains
=
keyword
)
|
Q
(
name__icontains
=
keyword
))
.
order_by
(
'
name'
)
users_list
=
users_list
.
filter
(
Q
(
username__icontains
=
keyword
)
|
Q
(
name__icontains
=
keyword
))
.
order_by
(
'user
name'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
contact
_list
,
request
)
users_list
,
p
,
users
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
users
_list
,
request
)
return
my_render
(
'juser/user_list.html'
,
locals
(),
request
)
return
my_render
(
'juser/user_list.html'
,
locals
(),
request
)
...
@@ -568,8 +568,6 @@ def user_edit(request):
...
@@ -568,8 +568,6 @@ def user_edit(request):
role
=
role_post
,
role
=
role_post
,
is_active
=
is_active
)
is_active
=
is_active
)
print
'#'
*
10
+
role_post
if
email_need
:
if
email_need
:
msg
=
u"""
msg
=
u"""
Hi
%
s:
Hi
%
s:
...
@@ -669,7 +667,7 @@ def change_info(request):
...
@@ -669,7 +667,7 @@ def change_info(request):
if
''
in
[
name
,
password
,
email
]:
if
''
in
[
name
,
password
,
email
]:
error
=
'不能为空'
error
=
'不能为空'
if
len
(
password
)
<
6
:
if
len
(
password
)
<
6
:
error
=
'密码须大于6位'
error
=
'密码须大于6位'
if
not
error
:
if
not
error
:
...
...
static/js/base.js
View file @
8bf9103f
...
@@ -70,17 +70,17 @@ function move(from, to, from_o, to_o) {
...
@@ -70,17 +70,17 @@ function move(from, to, from_o, to_o) {
});
});
}
}
function
move_left
(
from
,
to
,
from_o
,
to_o
)
{
//
function move_left(from, to, from_o, to_o) {
$
(
"#"
+
from
+
" option"
).
each
(
function
()
{
//
$("#" + from + " option").each(function () {
if
(
$
(
this
).
prop
(
"selected"
)
==
true
)
{
//
if ($(this).prop("selected") == true) {
$
(
"#"
+
to
).
append
(
this
);
//
$("#" + to).append(this);
if
(
typeof
from_o
!==
'undefined'
){
//
if( typeof from_o !== 'undefined'){
$
(
"#"
+
to_o
).
append
(
$
(
"#"
+
from_o
+
" option[value='"
+
this
.
value
+
"']"
));
//
$("#"+to_o).append($("#"+from_o +" option[value='"+this.value+"']"));
}
//
}
}
//
}
$
(
this
).
attr
(
"selected"
,
'true'
);
//
$(this).attr("selected",'true');
});
//
});
}
//
}
//function move_all(from, to) {
//function move_all(from, to) {
// $("#" + from).children().each(function () {
// $("#" + from).children().each(function () {
...
...
templates/index.html
View file @
8bf9103f
...
@@ -114,8 +114,8 @@
...
@@ -114,8 +114,8 @@
<small
class=
"pull-right"
>
{{ perm.date_add|naturaltime }}
</small>
<small
class=
"pull-right"
>
{{ perm.date_add|naturaltime }}
</small>
{% endifequal %}
{% endifequal %}
<strong>
{{ perm.applyer }}
</strong>
<strong>
{{ perm.applyer }}
</strong>
<div>
申请 {{ perm.bisgroup|ast_to_list }} 主机组权限
</div>
{#
<div>
申请 {{ perm.bisgroup|ast_to_list }} 主机组权限
</div>
#}
<div>
申请 {{ perm.asset|ast_to_list }} 主机权限
</div>
{#
<div>
申请 {{ perm.asset|ast_to_list }} 主机权限
</div>
#}
<small
class=
"text-muted"
>
{{ perm.date_add }}
</small>
<small
class=
"text-muted"
>
{{ perm.date_add }}
</small>
</div>
</div>
</div>
</div>
...
...
templates/jasset/
hos
t_add.html
→
templates/jasset/
asse
t_add.html
View file @
8bf9103f
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
<div
class=
"col-lg-10"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox float-e-margins"
>
<div
id=
"ibox-content"
class=
"ibox-title"
>
<div
id=
"ibox-content"
class=
"ibox-title"
>
<h5>
填写
主机
基本信息
</h5>
<h5>
填写
资产
基本信息
</h5>
<div
class=
"ibox-tools"
>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
<i
class=
"fa fa-chevron-up"
></i>
...
@@ -15,12 +15,6 @@
...
@@ -15,12 +15,6 @@
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
<i
class=
"fa fa-wrench"
></i>
</a>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
<i
class=
"fa fa-times"
></i>
</a>
</a>
...
@@ -31,87 +25,61 @@
...
@@ -31,87 +25,61 @@
<div
class=
"panel blank-panel"
>
<div
class=
"panel blank-panel"
>
<div
class=
"panel-options"
>
<div
class=
"panel-options"
>
<ul
class=
"nav nav-tabs"
>
<ul
class=
"nav nav-tabs"
>
<li
class=
"active"
><a
href=
"/jasset/
hos
t_add/"
class=
"text-center"
><i
class=
"fa fa-laptop"
></i>
单台添加
</a></li>
<li
class=
"active"
><a
href=
"/jasset/
asse
t_add/"
class=
"text-center"
><i
class=
"fa fa-laptop"
></i>
单台添加
</a></li>
<li><a
href=
"/jasset/host_add_multi"
class=
"text-center"
><i
class=
"fa fa-bar-chart-o"
></i>
批量添加
</a></li>
<li><a
href=
"/jasset/host_add_multi"
class=
"text-center"
><i
class=
"fa fa-bar-chart-o"
></i>
批量添加
</a></li>
</ul>
</ul>
</div>
</div>
<div
class=
"panel-body"
>
<div
class=
"panel-body"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
<div
id=
"tab-1"
class=
"ibox float-e-margins tab-pane active"
>
<div
id=
"tab-1"
class=
"ibox float-e-margins tab-pane active"
>
{% if e
mg
%}
{% if e
rror
%}
<div
class=
"alert alert-warning text-center"
>
{{ e
mg
}}
</div>
<div
class=
"alert alert-warning text-center"
>
{{ e
rror
}}
</div>
{% endif %}
{% endif %}
{% if
sm
g %}
{% if
ms
g %}
<div
class=
"alert alert-success text-center"
>
{{
sm
g }}
</div>
<div
class=
"alert alert-success text-center"
>
{{
ms
g }}
</div>
{% endif %}
{% endif %}
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
>
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
IP地址
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
IP地址
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
><input
type=
"text"
name=
"
j_ip"
placeholder=
"192.168.1.1
"
class=
"form-control"
></div>
<div
class=
"col-sm-8"
><input
type=
"text"
name=
"
ip"
placeholder=
"IP
"
class=
"form-control"
></div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
端口号
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"form-group"
>
<div
class=
"col-sm-8"
><input
type=
"text"
placeholder=
"22"
name=
"j_port"
class=
"form-control"
></div>
<label
class=
"col-sm-2 control-label"
>
端口号
<span
class=
"red-fonts"
>
*
</span>
</label>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
登录方式
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<div
class=
"radio i-checks"
><label>
<input
type=
"radio"
id=
"L"
checked=
""
value=
"L"
name=
"j_type"
onclick=
"show(this)"
>
<i>
LDAP
</i></label></div>
<input
type=
"text"
placeholder=
"Port"
name=
"port"
class=
"form-control"
>
<div
class=
"radio i-checks"
><label>
<input
type=
"radio"
id=
"M"
value=
"M"
name=
"j_type"
onclick=
"show(this)"
>
<i>
MAP
</i></label></div>
</div>
<div
name=
"a1"
id=
a1
style=
"display:none;"
>
<div
class=
"form-group"
><label
class=
"col-sm-2 col-sm-offset-1 control-label"
>
普通用户名
</label>
<div
class=
"col-sm-6"
><input
type=
"text"
name=
"j_user"
placeholder=
"lilei"
class=
"form-control"
></div>
</div>
<div
class=
"form-group"
><label
class=
"col-sm-2 col-sm-offset-1 control-label"
>
普通用户密码
</label>
<div
class=
"col-sm-6"
><input
type=
"password"
name=
"j_password"
placeholder=
"Password"
class=
"form-control"
></div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"j_idc"
class=
"col-lg-2 control-label"
>
所属IDC
<span
class=
"red-fonts"
>
*
</span>
</label>
<label
for=
"j_group"
class=
"col-sm-2 control-label"
>
使用默认管理账号
</label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-1"
>
<select
id=
"j_idc"
name=
"j_idc"
class=
"form-control m-b"
>
<div
class=
"radio i-checks"
>
{% for i in eidc %}
<label>
<option
value=
"{{i.id}}"
>
{{ i }}
</option>
<input
type=
"checkbox"
checked=
""
value=
"1"
id=
"use_default_auth"
name=
"use_default_auth"
>
{% endfor %}
</label>
</select>
</div>
</div>
</div>
</div>
{% ifequal session_role_id 2 %}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"j_dept"
class=
"col-lg-2 control-label"
>
所属部门
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<select
id=
"j_dept"
name=
"j_dept"
class=
"form-control m-b"
multiple
size=
"10"
>
{% for d in edept %}
<option
type=
"checkbox"
value=
"{{ d.id }}"
>
{{ d.name }} {% if d.comment %} --- {{ d.comment }} {% endif %}
</option>
{% endfor %}
</select>
</div>
</div>
<div
class=
"form-group"
id=
"admin_account"
style=
"display: none"
>
<label
class=
"col-sm-2 control-label"
>
管理用户名
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-3"
>
<input
type=
"text"
placeholder=
"Username"
name=
"username"
class=
"form-control"
>
</div>
</div>
{% endifequal %}
{% ifequal session_role_id 1 %}
<label
class=
"col-sm-1 control-label"
>
密码
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"col-sm-4"
>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
所属部门
<span
class=
"red-fonts"
>
*
</span></label>
<input
type=
"password"
placeholder=
"Password"
name=
"password"
class=
"form-control"
>
<input
type=
"text"
name=
"j_dept"
value=
"{{ dept.id }}"
style=
"display: none"
>
</div>
<div
class=
"col-sm-8"
><input
type=
"text"
value=
"{{ dept.name }}"
class=
"form-control"
readonly=
"readonly"
></div>
</div>
</div>
{% endifequal %}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"
j_group"
class=
"col-lg
-2 control-label"
>
所属主机组
</label>
<label
for=
"
groups"
class=
"col-sm
-2 control-label"
>
所属主机组
</label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
id=
"
j_group"
name=
"j_group
"
class=
"form-control m-b"
multiple
size=
"10"
>
<select
id=
"
groups"
name=
"groups
"
class=
"form-control m-b"
multiple
size=
"10"
>
{% for g in egroup %}
{% for g in egroup %}
<option
type=
"checkbox"
value=
"{{ g.id }}"
>
{{ g.name }} {% if g.comment %} --- {{ g.comment }} {% endif %}
</option>
<option
type=
"checkbox"
value=
"{{ g.id }}"
>
{{ g.name }} {% if g.comment %} --- {{ g.comment }} {% endif %}
</option>
{% endfor %}
{% endfor %}
...
@@ -122,20 +90,22 @@
...
@@ -122,20 +90,22 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
是否激活
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
是否激活
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<div
class=
"radio i-checks"
><label>
<input
type=
"radio"
checked=
""
value=
"1"
name=
"j_active"
>
<i>
激活
</i></label></div>
<div
class=
"radio i-checks"
>
<div
class=
"radio i-checks"
><label>
<input
type=
"radio"
value=
"0"
name=
"j_active"
>
<i>
禁用
</i></label></div>
<label>
<input
type=
"radio"
checked=
""
value=
"1"
name=
"is_active"
>
激活
</label>
<label>
<input
type=
"radio"
value=
"0"
name=
"is_active"
>
禁用
</label>
</div>
</div>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
><input
type=
"text"
placeholder=
"
hadoop01"
name=
"j_
comment"
class=
"form-control"
></div>
<div
class=
"col-sm-8"
><input
type=
"text"
placeholder=
"
comment"
name=
"
comment"
class=
"form-control"
></div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-
5
"
>
<div
class=
"col-sm-4 col-sm-offset-
2
"
>
<button
class=
"btn btn-white"
type=
"
submi
t"
>
重置
</button>
<button
class=
"btn btn-white"
type=
"
rese
t"
>
重置
</button>
<button
class=
"btn btn-primary"
type=
"submit"
>
提交
</button>
<button
class=
"btn btn-primary"
type=
"submit"
>
提交
</button>
</div>
</div>
</div>
</div>
...
@@ -149,17 +119,21 @@
...
@@ -149,17 +119,21 @@
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block self_footer_js %}
<script>
<script>
var
showFlag
=
{};
function
show
(
o
){
$
(
'document'
).
ready
(
function
(){
showFlag
[
o
.
name
]
=
o
.
value
;
$
(
'#use_default_auth'
).
click
(
function
(){
if
(
showFlag
.
j_type
==
"M"
){
if
(
$
(
this
).
is
(
':checked'
)){
document
.
getElementById
(
"a1"
).
style
.
display
=
""
;
$
(
'#admin_account'
).
css
(
'display'
,
'none'
)
}
else
{
$
(
'#admin_account'
).
css
(
'display'
,
'block'
)
}
}
else
{
})
document
.
getElementById
(
"a1"
).
style
.
display
=
"none"
;
});
}};
$
(
'#assetForm'
).
validator
({
$
(
'#assetForm'
).
validator
({
timely
:
2
,
timely
:
2
,
...
@@ -167,34 +141,19 @@ $('#assetForm').validator({
...
@@ -167,34 +141,19 @@ $('#assetForm').validator({
rules
:
{
rules
:
{
check_ip
:
[
/^
(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])(\.(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])){3}
$/
,
'ip地址不正确'
],
check_ip
:
[
/^
(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])(\.(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])){3}
$/
,
'ip地址不正确'
],
check_port
:
[
/^
\d{1,5}
$/
,
'端口号不正确'
],
check_port
:
[
/^
\d{1,5}
$/
,
'端口号不正确'
],
type_m
:
function
(
element
){
return
$
(
"#M"
).
is
(
":checked"
);
}
},
},
fields
:
{
fields
:
{
"
j_
ip"
:
{
"ip"
:
{
rule
:
"required;check_ip"
,
rule
:
"required;check_ip"
,
tip
:
"输入IP"
,
tip
:
"输入IP"
,
ok
:
""
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
msg
:
{
required
:
"必须填写!"
}
},
},
"
j_
port"
:
{
"port"
:
{
rule
:
"required;check_port"
,
rule
:
"required;check_port"
,
tip
:
"输入端口号"
,
tip
:
"输入端口号"
,
ok
:
""
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
msg
:
{
required
:
"必须填写!"
}
},
"j_idc"
:
{
rule
:
"required"
,
tip
:
"选择IDC"
,
ok
:
""
,
msg
:
{
checked
:
"必须填写!"
}
},
"j_dept"
:
{
rule
:
"required"
,
tip
:
"选择部门"
,
ok
:
""
,
msg
:
{
checked
:
"至少选择一个部门"
}
}
}
},
},
valid
:
function
(
form
)
{
valid
:
function
(
form
)
{
...
...
templates/jasset/
hos
t_detail.html
→
templates/jasset/
asse
t_detail.html
View file @
8bf9103f
...
@@ -9,14 +9,11 @@
...
@@ -9,14 +9,11 @@
<div
class=
"col-lg-4"
>
<div
class=
"col-lg-4"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<div
class=
"ibox-title"
>
<span
class=
"text text-primary"
><b>
{{
pos
t.ip }}
</b></span>
<span
class=
"text text-primary"
><b>
{{
asse
t.ip }}
</b></span>
<div
class=
"ibox-tools"
>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
<i
class=
"fa fa-chevron-up"
></i>
</a>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<ul
class=
"dropdown-menu dropdown-user"
>
</ul>
</ul>
<a
class=
"close-link"
>
<a
class=
"close-link"
>
...
@@ -34,55 +31,35 @@
...
@@ -34,55 +31,35 @@
<table
class=
"table"
>
<table
class=
"table"
>
<tr>
<tr>
<td
class=
"text-navy"
>
IP
</td>
<td
class=
"text-navy"
>
IP
</td>
<td>
{{
pos
t.ip }}
</td>
<td>
{{
asse
t.ip }}
</td>
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
端口
</td>
<td
class=
"text-navy"
>
端口
</td>
<td>
{{ post.port }}
</td>
<td>
{{ asset.port }}
</td>
</tr>
<tr>
<td
class=
"text-navy"
>
登录方式
</td>
<td>
{{ post.login_type|get_login_type }}
</td>
</tr>
<tr>
<td
class=
"text-navy"
>
IDC
</td>
<td>
{{ post.idc.name }}
</td>
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
部门
</td>
<td
class=
"text-navy"
>
主机组
</td>
<td>
<td>
<table
class=
"table"
>
<table
class=
"table"
>
{% for dept in post.dept.all %}
<tr>
<td>
{{ dept.name }}
</td>
</tr>
{% endfor %}
</table>
</table>
</td>
</td>
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
主机组
</td>
<td
class=
"text-navy"
>
使用默认管理账号
</td>
<td>
<td>
{{ asset.use_default_auth|bool2str }}
</td>
<table
class=
"table"
>
{% for group in post.bis_group.all %}
<tr>
<td>
{{ group.name }}
</td>
</tr>
{% endfor %}
</table>
</td>
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
激活
</td>
<td
class=
"text-navy"
>
激活
</td>
<td>
{{
pos
t.is_active|bool2str }}
</td>
<td>
{{
asse
t.is_active|bool2str }}
</td>
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
添加日期
</td>
<td
class=
"text-navy"
>
添加日期
</td>
<td>
{{
pos
t.date_added|date:"Y-m-d H:i:s" }}
</td>
<td>
{{
asse
t.date_added|date:"Y-m-d H:i:s" }}
</td>
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
备注
</td>
<td
class=
"text-navy"
>
备注
</td>
<td>
{{
pos
t.comment }}
</td>
<td>
{{
asse
t.comment }}
</td>
</tr>
</tr>
</table>
</table>
</div>
</div>
...
@@ -116,17 +93,17 @@
...
@@ -116,17 +93,17 @@
<div>
<div>
<div
class=
"text-left"
>
<div
class=
"text-left"
>
<table
class=
"table"
>
<table
class=
"table"
>
{% if user_permed_list %
}
{# {% if user_permed_list %}#
}
{% for user in user_permed_list %
}
{# {% for user in user_permed_list %}#
}
<tr>
{#
<tr>
#}
<td
class=
"text-navy"
>
{{ user.name }}
</td>
{#
<td
class=
"text-navy"
>
{{ user.name }}
</td>
#}
<td>
{{ user.dept.name }}
</td>
{#
<td>
{{ user.dept.name }}
</td>
#}
<td><a
href=
"/juser/user_detail/?id={{ user.id }}"
>
详情
</a></td>
{#
<td><a
href=
"/juser/user_detail/?id={{ user.id }}"
>
详情
</a></td>
#}
</tr>
{#
</tr>
#}
{% endfor %
}
{# {% endfor %}#
}
{% else %
}
{# {% else %}#
}
<p
class=
"text-center"
>
(暂无)
</p>
{#
<p
class=
"text-center"
>
(暂无)
</p>
#}
{% endif %
}
{# {% endif %}#
}
</table>
</table>
</div>
</div>
</div>
</div>
...
@@ -157,49 +134,49 @@
...
@@ -157,49 +134,49 @@
<small><i
class=
"fa fa-map-marker"
></i>
此主机最近一周用户登录信息.
</small>
<small><i
class=
"fa fa-map-marker"
></i>
此主机最近一周用户登录信息.
</small>
</div>
</div>
<div
class=
"ibox-content inspinia-timeline"
>
<div
class=
"ibox-content inspinia-timeline"
>
{% if log %
}
{# {% if log %}#
}
{% for l in log %
}
{# {% for l in log %}#
}
<div
class=
"timeline-item"
>
{#
<div
class=
"timeline-item"
>
#}
<div
class=
"row"
>
{#
<div
class=
"row"
>
#}
<div
class=
"col-xs-5 date"
>
{#
<div
class=
"col-xs-5 date"
>
#}
<i
class=
"fa fa-info-circle"
></i>
{#
<i
class=
"fa fa-info-circle"
></i>
#}
<small
class=
"text-navy"
>
{{ l.user }}
</small>
{#
<small
class=
"text-navy"
>
{{ l.user }}
</small>
#}
<br/>
{#
<br/>
#}
<strong>
{{l.dept_name}}
</strong>
{#
<strong>
{{l.dept_name}}
</strong>
#}
</div>
{#
</div>
#}
<div
class=
"col-xs-7 content no-top-border"
>
{#
<div
class=
"col-xs-7 content no-top-border"
>
#}
<p
class=
"m-b-xs"
><strong>
详细信息
</strong></p>
{#
<p
class=
"m-b-xs"
><strong>
详细信息
</strong></p>
#}
<p>
来源IP: {{ l.remote_ip }}
</p>
{#
<p>
来源IP: {{ l.remote_ip }}
</p>
#}
<p>
开始: {{ l.start_time |date:"Y-m-d H:i:s" }}
</p>
{#
<p>
开始: {{ l.start_time |date:"Y-m-d H:i:s" }}
</p>
#}
<p>
结束: {{ l.end_time |date:"Y-m-d H:i:s" }}
</p>
{#
<p>
结束: {{ l.end_time |date:"Y-m-d H:i:s" }}
</p>
#}
</div>
{#
</div>
#}
</div>
{#
</div>
#}
</div>
{#
</div>
#}
{% endfor %
}
{# {% endfor %}#
}
<button
id=
"show"
class=
"btn btn-primary btn-block m-t"
><i
class=
"fa fa-arrow-down"
></i>
所有
</button>
{#
<button
id=
"show"
class=
"btn btn-primary btn-block m-t"
><i
class=
"fa fa-arrow-down"
></i>
所有
</button>
#}
<div
id=
'more'
style=
"display: none"
>
{#
<div
id=
'more'
style=
"display: none"
>
#}
<br/>
{#
<br/>
#}
{% for l in log_more %
}
{# {% for l in log_more %}#
}
<div
class=
"timeline-item"
>
{#
<div
class=
"timeline-item"
>
#}
<div
class=
"row"
>
{#
<div
class=
"row"
>
#}
<div
class=
"col-xs-5 date"
>
{#
<div
class=
"col-xs-5 date"
>
#}
<i
class=
"fa fa-info-circle"
></i>
{#
<i
class=
"fa fa-info-circle"
></i>
#}
<small
class=
"text-navy"
>
{{ l.user }}
</small>
{#
<small
class=
"text-navy"
>
{{ l.user }}
</small>
#}
<br/>
{#
<br/>
#}
<strong>
{{l.dept_name}}
</strong>
{#
<strong>
{{l.dept_name}}
</strong>
#}
</div>
{#
</div>
#}
<div
class=
"col-xs-7 content no-top-border"
>
{#
<div
class=
"col-xs-7 content no-top-border"
>
#}
<p
class=
"m-b-xs"
><strong>
详细信息
</strong></p>
{#
<p
class=
"m-b-xs"
><strong>
详细信息
</strong></p>
#}
<p>
来源IP: {{ l.remote_ip }}
</p>
{#
<p>
来源IP: {{ l.remote_ip }}
</p>
#}
<p>
开始: {{ l.start_time |date:"Y-m-d H:i:s" }}
</p>
{#
<p>
开始: {{ l.start_time |date:"Y-m-d H:i:s" }}
</p>
#}
<p>
结束: {{ l.end_time |date:"Y-m-d H:i:s" }}
</p>
{#
<p>
结束: {{ l.end_time |date:"Y-m-d H:i:s" }}
</p>
#}
</div>
{#
</div>
#}
</div>
{#
</div>
#}
</div>
{#
</div>
#}
{% endfor %
}
{# {% endfor %}#
}
{% else %
}
{# {% else %}#
}
<p
class=
"text-center"
>
(暂无)
</p>
{#
<p
class=
"text-center"
>
(暂无)
</p>
#}
{% endif %
}
{# {% endif %}#
}
</div>
</div>
</div>
</div>
...
...
templates/jasset/asset_edit.html
0 → 100644
View file @
8bf9103f
{% 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
id=
"ibox-content"
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>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<div
class=
"panel-body"
>
<div
class=
"tab-content"
>
<div
id=
"tab-1"
class=
"ibox float-e-margins tab-pane active"
>
{% if error %}
<div
class=
"alert alert-warning text-center"
>
{{ error }}
</div>
{% endif %}
{% if msg %}
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
IP地址
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
><input
type=
"text"
name=
"ip"
value=
"{{ asset.ip }}"
class=
"form-control"
></div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
class=
"col-sm-2 control-label"
>
端口号
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
>
<input
type=
"text"
value=
"{{ asset.port }}"
name=
"port"
class=
"form-control"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"j_group"
class=
"col-sm-2 control-label"
>
使用默认管理账号
</label>
<div
class=
"col-sm-1"
>
<div
class=
"radio i-checks"
>
<label>
<input
type=
"checkbox"
{%
ifequal
asset
.
use_default_auth
1
%}
checked=
""
{%
endifequal
%}
value=
"1"
id=
"use_default_auth"
name=
"use_default_auth"
>
</label>
</div>
</div>
</div>
<div
class=
"form-group"
id=
"admin_account"
{%
ifequal
asset
.
use_default_auth
1
%}
style=
"display: none"
{%
endifequal
%}
>
<label
class=
"col-sm-2 control-label"
>
管理用户名
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-3"
>
<input
type=
"text"
{%
ifnotequal
asset
.
use_default_auth
1
%}
value=
"{{ asset.username }}"
{%
endifnotequal
%}
name=
"username"
class=
"form-control"
>
</div>
<label
class=
"col-sm-1 control-label"
>
密码
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-4"
>
<input
type=
"password"
{%
ifnotequal
asset
.
use_default_auth
1
%}
value=
"{{ asset.password }}"
{%
endifnotequal
%}
name=
"password"
class=
"form-control"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"groups"
class=
"col-sm-2 control-label"
>
所属主机组
</label>
<div
class=
"col-sm-8"
>
<select
id=
"groups"
name=
"groups"
class=
"form-control m-b"
multiple
size=
"10"
>
{% for g in egroup %}
<option
type=
"checkbox"
value=
"{{ g.id }}"
>
{{ g.name }} {% if g.comment %} --- {{ g.comment }} {% endif %}
</option>
{% endfor %}
</select>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
是否激活
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
>
<div
class=
"radio i-checks"
>
{% ifequal asset.is_active 1 %}
<label>
<input
type=
"radio"
checked=
""
value=
"1"
name=
"is_active"
>
激活
</label>
<label>
<input
type=
"radio"
value=
"0"
name=
"is_active"
>
禁用
</label>
{% else %}
<label>
<input
type=
"radio"
value=
"1"
name=
"is_active"
>
激活
</label>
<label>
<input
type=
"radio"
checked=
""
value=
"0"
name=
"is_active"
>
禁用
</label>
{% endifequal %}
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
><input
type=
"text"
value=
"{{ asset.comment }}"
name=
"comment"
class=
"form-control"
></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=
"reset"
>
重置
</button>
<button
class=
"btn btn-primary"
type=
"submit"
>
提交
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block self_footer_js %}
<script>
$
(
'document'
).
ready
(
function
(){
$
(
'#use_default_auth'
).
click
(
function
(){
if
(
$
(
this
).
is
(
':checked'
)){
$
(
'#admin_account'
).
css
(
'display'
,
'none'
)
}
else
{
$
(
'#admin_account'
).
css
(
'display'
,
'block'
)
}
})
});
$
(
'#assetForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
rules
:
{
check_ip
:
[
/^
(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])(\.(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])){3}
$/
,
'ip地址不正确'
],
check_port
:
[
/^
\d{1,5}
$/
,
'端口号不正确'
],
},
fields
:
{
"ip"
:
{
rule
:
"required;check_ip"
,
tip
:
"输入IP"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
},
"port"
:
{
rule
:
"required;check_port"
,
tip
:
"输入端口号"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
</script>
{% endblock %}
\ No newline at end of file
templates/jasset/
hos
t_list.html
→
templates/jasset/
asse
t_list.html
View file @
8bf9103f
...
@@ -16,12 +16,6 @@
...
@@ -16,12 +16,6 @@
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
<i
class=
"fa fa-wrench"
></i>
</a>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
<i
class=
"fa fa-times"
></i>
</a>
</a>
...
@@ -30,14 +24,14 @@
...
@@ -30,14 +24,14 @@
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
<div>
<div>
<a
target=
"_blank"
href=
"/jasset/
host_add
"
class=
"btn btn-sm btn-primary "
>
添加
</a>
<a
target=
"_blank"
href=
"/jasset/
asset_add/
"
class=
"btn btn-sm btn-primary "
>
添加
</a>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"keyword"
placeholder=
"Search"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"keyword"
placeholder=
"Search"
>
<input
type=
"text"
style=
"display: none"
>
<input
type=
"text"
style=
"display: none"
>
<div
class=
"input-group-btn"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
type=
"button"
class=
"btn btn-sm btn-primary"
onclick=
"host_search()
"
>
<button
type=
"submit"
class=
"btn btn-sm btn-primary
"
>
Search
- 搜索 -
</button>
</button>
</div>
</div>
</div>
</div>
...
@@ -48,37 +42,35 @@
...
@@ -48,37 +42,35 @@
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
name=
"editable"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
name=
"editable"
>
<thead>
<thead>
<tr>
<tr>
<th
class=
"text-center"
><input
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('contents_form')"
></th>
<th
class=
"text-center"
>
<th
class=
"text-center"
name=
"j_ip"
>
IP地址
</th>
<input
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('contents_form')"
>
</th>
<th
class=
"text-center"
name=
"ip"
>
IP地址
</th>
<th
class=
"text-center"
>
端口号
</th>
<th
class=
"text-center"
>
端口号
</th>
<th
class=
"text-center"
name=
"j_type"
>
登录方式
</th>
<th
class=
"text-center"
name=
"j_idc"
>
所属IDC
</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"
name=
"j_comment"
>
备注
</th>
<th
class=
"text-center"
>
激活
</th>
<th
class=
"text-center"
name=
"comment"
>
备注
</th>
<th
class=
"text-center"
>
操作
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</tr>
</thead>
</thead>
<tbody>
<tbody>
{% for
post in contac
ts.object_list %}
{% for
asset in asse
ts.object_list %}
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
name=
"j_id"
value=
"{{ post.id }}"
data-editable=
'false'
><input
name=
"id"
value=
"{{ post.id }}"
type=
"checkbox"
class=
"i-checks"
></td>
<td
class=
"text-center"
name=
"id"
value=
"{{ asset.id }}"
data-editable=
'false'
>
<td
class=
"text-center"
name=
"j_ip"
>
{{ post.ip }}
</td>
<input
name=
"id"
value=
"{{ asset.id }}"
type=
"checkbox"
class=
"i-checks"
>
<td
class=
"text-center"
name=
"j_port"
>
{{ post.port }}
</td>
</td>
<td
class=
"text-center"
name=
"j_type"
>
{{ post.login_type|get_login_type }}
</td>
<td
class=
"text-center"
>
{{ asset.ip }}
</td>
<td
class=
"text-center"
name=
"j_idc"
>
{{ post.idc.name }}
</td>
<td
class=
"text-center"
>
{{ asset.port }}
</td>
<td
class=
"text-center"
name=
"j_dept"
>
{{ post.dept.all | group_str2 }}
</td>
<td
class=
"text-center"
>
{{ asset.port }}
</td>
<!--<td class="text-center" id="j_dept_{{post.id}}" name="j_dept" onclick="show_all('dept', '{{post.id}}')">{{ post.dept.all | group_str2 }}</td>-->
<td
class=
"text-center"
>
{{ asset.use_default_auth|bool2str }}
</td>
<td
class=
"text-center"
name=
"j_group"
>
{{ post.bis_group.all | group_str2_all }}
</td>
<td
class=
"text-center"
>
{{ asset.is_active|bool2str }}
</td>
<!--<td class="text-center" id="j_group_{{post.id}}" name="j_group" onclick="show_all('group', '{{post.id}}')">{{ post.bis_group.all | group_str2_all }}</td>-->
<td
class=
"text-center"
>
{{ asset.comment }}
</td>
<td
class=
"text-center"
name=
"j_active"
>
{{ post.is_active|bool2str }}
</td>
<td
class=
"text-center"
name=
"j_comment"
>
{{ post.comment }}
</td>
<td
class=
"text-center"
data-editable=
'false'
>
<td
class=
"text-center"
data-editable=
'false'
>
<a
href=
"/jasset/
host_detail/?id={{ pos
t.id }}"
class=
"btn btn-xs btn-primary"
>
详情
</a>
<a
href=
"/jasset/
asset_detail/?id={{ asse
t.id }}"
class=
"btn btn-xs btn-primary"
>
详情
</a>
{% ifnotequal session_role_id 0 %}
{% ifnotequal session_role_id 0 %}
<a
href=
"/jasset/
host_edit/?id={{ pos
t.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/
asset_edit/?id={{ asse
t.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/host_del/{{ post.id }}"
class=
"btn btn-xs btn-danger
"
>
删除
</a>
<a
value=
"/jasset/asset_del/?id={{ asset.id }}"
class=
"btn btn-xs btn-danger asset_del
"
>
删除
</a>
{% endifnotequal %}
{% endifnotequal %}
</td>
</td>
</tr>
</tr>
...
@@ -98,7 +90,9 @@
...
@@ -98,7 +90,9 @@
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block self_footer_js %}
<script>
<script>
$
(
'table td'
).
on
(
'change'
,
function
(
env
,
id
){
$
(
'table td'
).
on
(
'change'
,
function
(
env
,
id
){
var
url
=
"/jasset/show_all_ajax/?env="
+
env
+
"&id="
+
id
;
var
url
=
"/jasset/show_all_ajax/?env="
+
env
+
"&id="
+
id
;
...
@@ -111,10 +105,21 @@
...
@@ -111,10 +105,21 @@
$
(
"#j_dept_"
+
id
).
html
(
data
);
$
(
"#j_dept_"
+
id
).
html
(
data
);
}
}
});
});
})
})
;
$
(
document
).
ready
(
function
(){
$
(
document
).
ready
(
function
(){
$
(
'#editable'
).
editableTableWidget
({
editor
:
$
(
'<textarea>'
)});
$
(
'#editable'
).
editableTableWidget
({
editor
:
$
(
'<textarea>'
)});
$
(
'.asset_del'
).
click
(
function
(){
var
row
=
$
(
this
).
closest
(
'tr'
);
$
.
get
(
$
(
this
).
attr
(
'value'
),
{},
function
(
data
){
alert
(
data
);
row
.
remove
()
}
)
})
});
});
...
@@ -157,22 +162,22 @@
...
@@ -157,22 +162,22 @@
}
}
}
}
function
host_search
(){
{
#
function
host_search
(){
#
}
$
.
ajax
({
{
#
$
.
ajax
({
#
}
type
:
"GET"
,
{
#
type
:
"GET"
,
#
}
url
:
"/jasset/search/"
,
{
#
url
:
"/jasset/search/"
,
#
}
data
:
$
(
"#search_form"
).
serialize
(),
{
#
data
:
$
(
"#search_form"
).
serialize
(),
#
}
success
:
function
(
data
)
{
{
#
success
:
function
(
data
)
{
#
}
$
(
"#contents_form"
).
html
(
data
);
{
#
$
(
"#contents_form"
).
html
(
data
);
#
}
}
{
#
}
#
}
});
{
#
});
#
}
}
{
#
}
#
}
$
(
"#search_input"
).
keydown
(
function
(
e
){
$
(
"#search_input"
).
keydown
(
function
(
e
){
if
(
e
.
keyCode
==
13
){
if
(
e
.
keyCode
==
13
){
host_search
()
host_search
()
}
}
})
})
;
function
show_all
(
env
,
id
)
{
function
show_all
(
env
,
id
)
{
var
url
=
"/jasset/show_all_ajax/?env="
+
env
+
"&id="
+
id
;
var
url
=
"/jasset/show_all_ajax/?env="
+
env
+
"&id="
+
id
;
...
...
templates/jasset/group_add.html
View file @
8bf9103f
...
@@ -22,7 +22,7 @@
...
@@ -22,7 +22,7 @@
<div
class=
"col-lg-10"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox float-e-margins"
>
<div
id=
"ibox-content"
class=
"ibox-title"
>
<div
id=
"ibox-content"
class=
"ibox-title"
>
<h5>
填写
主机
组基本信息
</h5>
<h5>
填写
资产
组基本信息
</h5>
<div
class=
"ibox-tools"
>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
<i
class=
"fa fa-chevron-up"
></i>
...
@@ -30,64 +30,38 @@
...
@@ -30,64 +30,38 @@
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
<i
class=
"fa fa-wrench"
></i>
</a>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
<i
class=
"fa fa-times"
></i>
</a>
</a>
</div>
</div>
</div>
</div>
<select
id=
"assets_total"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
{#
<select
id=
"assets_total"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
#}
{% for asset in posts %
}
{# {% for asset in assets_all %}#
}
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
{#
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
#}
{% endfor %
}
{# {% endfor %}#
}
</select>
{#
</select>
#}
{##}
<select
id=
"asset_select_total"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
{#
<select
id=
"asset_select_total"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
#}
{% for asset in eposts %
}
{# {% for asset in eposts %}#
}
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
{#
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
#}
{% endfor %
}
{# {% endfor %}#
}
</select>
{#
</select>
#}
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
{% if e
mg
%}
{% if e
rror
%}
<div
class=
"alert alert-warning text-center"
>
{{ e
mg
}}
</div>
<div
class=
"alert alert-warning text-center"
>
{{ e
rror
}}
</div>
{% endif %}
{% endif %}
{% if
sm
g %}
{% if
ms
g %}
<div
class=
"alert alert-success text-center"
>
{{
sm
g }}
</div>
<div
class=
"alert alert-success text-center"
>
{{
ms
g }}
</div>
{% endif %}
{% endif %}
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
>
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
主机组名
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
name=
"group_id"
value=
"{{ post.id }}"
><input
type=
"text"
value=
"{{ group.name }}"
placeholder=
"网站"
name=
"j_group"
class=
"form-control"
></div>
</div>
{% ifequal session_role_id 2 %}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"j_dept"
class=
"col-lg-2 control-label"
>
所属部门
<span
class=
"red-fonts"
>
*
</span></label>
<label
class=
"col-sm-2 control-label"
>
主机组名
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
id=
"j_dept"
name=
"j_dept"
class=
"form-control m-b"
onchange=
"change_dept(this.value)"
>
<input
type=
"text"
placeholder=
"Name"
name=
"name"
class=
"form-control"
>
{% for d in edept %}
<option
value=
"{{ d.id }}"
>
{{ d.name }}
</option>
{% endfor %}
</select>
</div>
</div>
</div>
{% endifequal %}
{% ifequal session_role_id 1 %}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"j_dept"
class=
"col-lg-2 control-label"
>
所属部门
<span
class=
"red-fonts"
style=
""
>
*
</span></label>
<input
type=
"text"
name=
"j_dept"
value=
"{{ edept.id }}"
style=
"display: none"
>
<div
class=
"col-sm-8"
><input
type=
"text"
value=
"{{ edept.name }}"
class=
"form-control"
readonly=
"readonly"
></div>
</div>
</div>
{% endifequal %}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
...
@@ -108,8 +82,8 @@
...
@@ -108,8 +82,8 @@
<div
class=
"col-sm-4"
>
<div
class=
"col-sm-4"
>
<div>
<div>
<select
id=
"assets"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
>
<select
id=
"assets"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
>
{% for
post in posts
%}
{% for
asset in asset_all
%}
<option
value=
"{{
post.id }}"
>
{{ pos
t.ip }}
</option>
<option
value=
"{{
asset.id }}"
>
{{ asse
t.ip }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
</div>
</div>
...
@@ -118,27 +92,30 @@
...
@@ -118,27 +92,30 @@
<div
class=
"col-sm-1"
>
<div
class=
"col-sm-1"
>
<div
class=
"btn-group"
style=
"margin-top: 60px;"
>
<div
class=
"btn-group"
style=
"margin-top: 60px;"
>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('assets', 'asset_select', 'assets_total', 'asset_select_total' )"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('assets', 'asset_select', 'assets_total', 'asset_select_total' )"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move
_left
('asset_select', 'assets', 'asset_select_total', 'assets_total')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('asset_select', 'assets', 'asset_select_total', 'assets_total')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
</div>
</div>
<div
class=
"col-sm-3"
>
<div
class=
"col-sm-3"
>
<div>
<div>
<select
id=
"asset_select"
name=
"
j_hosts
"
class=
"form-control m-b"
size=
"12"
multiple
></select>
<select
id=
"asset_select"
name=
"
asset_select
"
class=
"form-control m-b"
size=
"12"
multiple
></select>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"form-group"
>
<div
class=
"col-sm-8"
><input
type=
"text"
value=
"{{ j_comment }}"
placeholder=
包括web组所有主机
name=
"j_comment"
class=
"form-control"
></div>
<label
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
>
<input
type=
"text"
placeholder=
"Comment"
name=
"comment"
class=
"form-control"
>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-
5
"
>
<div
class=
"col-sm-4 col-sm-offset-
2
"
>
<button
class=
"btn btn-white"
type=
"
submi
t"
>
重置
</button>
<button
class=
"btn btn-white"
type=
"
rese
t"
>
重置
</button>
<button
class=
"btn btn-primary"
id=
"submit_button"
type=
"submit"
onclick=
"on_submit('groups_selected') "
>
提交
</button>
<button
class=
"btn btn-primary"
type=
"submit"
onclick=
"on_submit('groups_selected') "
>
提交
</button>
</div>
</div>
</div>
</div>
</form>
</form>
...
...
templates/jasset/group_list.html
View file @
8bf9103f
...
@@ -16,12 +16,6 @@
...
@@ -16,12 +16,6 @@
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
<i
class=
"fa fa-wrench"
></i>
</a>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
<i
class=
"fa fa-times"
></i>
</a>
</a>
...
@@ -29,14 +23,14 @@
...
@@ -29,14 +23,14 @@
</div>
</div>
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
<div
class=
""
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/jasset/group_add"
class=
"btn btn-sm btn-primary "
>
添加主机组
</a>
<a
target=
"_blank"
href=
"/jasset/group_add
/
"
class=
"btn btn-sm btn-primary "
>
添加主机组
</a>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"keyword"
placeholder=
"Search"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"keyword"
placeholder=
"Search"
>
<input
type=
"text"
style=
"display: none"
>
<input
type=
"text"
style=
"display: none"
>
<div
class=
"input-group-btn"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
type=
"submit"
class=
"btn btn-sm btn-primary"
>
<button
id=
'search_btn'
type=
"submit"
class=
"btn btn-sm btn-primary"
>
Search
- 搜索 -
</button>
</button>
</div>
</div>
</div>
</div>
...
@@ -47,26 +41,24 @@
...
@@ -47,26 +41,24 @@
<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
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('contents_form')"
></th>
<th
class=
"text-center"
>
<input
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('contents_form')"
>
</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>
</tr>
</tr>
</thead>
</thead>
<tbody>
<tbody>
{% for
post in contact
s.object_list %}
{% for
asset_group in asset_group
s.object_list %}
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
name=
"j_id"
value=
"{{ post.id }}"
data-editable=
'false'
><input
name=
"id"
value=
"{{ post.id }}"
type=
"checkbox"
class=
"i-checks"
></td>
<td
class=
"text-center"
name=
"id"
value=
"{{ asset_group.id }}"
data-editable=
'false'
>
<td
class=
"text-center"
>
{{ post.name }}
</td>
<input
name=
"id"
value=
"{{ post.id }}"
type=
"checkbox"
class=
"i-checks"
>
<td
class=
"text-center"
>
{{ post.dept.name }}
</td>
</td>
{% ifequal session_role_id 2 %}
<td
class=
"text-center"
>
{{ asset_group.name }}
</td>
<td
class=
"text-center"
>
<a
href=
"/jasset/group_detail/?id={{ post.id }}"
>
{{ post.asset_set.count }}
</a>
</td>
<td
class=
"text-center"
>
<a
href=
"/jasset/group_detail/?id={{ post.id }}"
>
{{ asset_group.asset_set.count }}
</a>
</td>
{% else %}
<td
class=
"text-center"
>
{{ asset_group.comment }}
</td>
<td
class=
"text-center"
>
<a
href=
"/jasset/group_detail/?id={{ post.id }}"
>
{{ post|get_group_count:dept }}
</a>
</td>
{% endifequal %}
<td
class=
"text-center"
>
{{ post.comment }}
</td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<a
href=
"/jasset/group_detail/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
详情
</a>
<a
href=
"/jasset/group_detail/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
详情
</a>
<a
href=
"/jasset/group_edit/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/group_edit/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
...
...
templates/jasset/host_edit.html
deleted
100644 → 0
View file @
4eb78e15
{% 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
id=
"ibox-content"
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"
>
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
{% endif %}
{% if smg %}
<div
class=
"alert alert-success text-center"
>
{{ smg }}
</div>
{% endif %}
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
autocomplete=
"off"
>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
IP地址
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
><input
type=
"text"
name=
"j_ip"
value=
"{{ post.ip }}"
placeholder=
"192.168.1.1"
class=
"form-control"
></div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
端口号
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
><input
type=
"text"
placeholder=
"22"
name=
"j_port"
value=
"{{ post.port }}"
class=
"form-control"
></div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
登录方式
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
>
{% for t, type in login_types.items %}
{% ifequal t post.login_type %}
<div
class=
"radio i-checks"
><label>
<input
type=
"radio"
checked=
""
value=
"{{ t }}"
name=
"j_type"
onclick=
"show(this)"
>
<i>
{{ type }}
</i></label></div>
{% else %}
<div
class=
"radio i-checks"
><label>
<input
type=
"radio"
value=
"{{ t }}"
name=
"j_type"
onclick=
"show(this)"
>
<i>
{{ type }}
</i></label></div>
{% endifequal %}
{% endfor %}
</div>
{% ifequal post.login_type 'M' %}
<div
name=
"type"
id=
"type"
>
<div
class=
"form-group"
><label
class=
"col-sm-2 col-sm-offset-1 control-label"
>
普通用户名
</label>
<div
class=
"col-sm-6"
><input
type=
"text"
name=
"j_user"
value=
"{{ post.username }}"
class=
"form-control"
></div>
</div>
<div
class=
"form-group"
><label
class=
"col-sm-2 col-sm-offset-1 control-label"
>
普通用户密码
</label>
<div
class=
"col-sm-6"
><input
type=
"password"
name=
"j_password"
value=
"{{ post.password }}"
class=
"form-control"
></div>
</div>
</div>
{% endifequal %}
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"j_idc"
class=
"col-lg-2 control-label"
>
所属IDC
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
>
<select
id=
"j_idc"
name=
"j_idc"
class=
"form-control m-b"
>
{% for i in eidc %}
{% ifequal i.id post.idc_id %}
<option
value=
"{{i.id}}"
selected
>
{{ i }}
</option>
{% else %}
<option
value=
"{{i.id}}"
>
{{ i }}
</option>
{% endifequal %}
{% endfor %}
</select>
</div>
</div>
{% ifequal session_role_id 2 %}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"j_dept"
class=
"col-lg-2 control-label"
>
所属部门
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<select
id=
"j_dept"
name=
"j_dept"
class=
"form-control m-b"
multiple
size=
"10"
>
{% for d in edept %}
{% if d in e_dept %}
<option
type=
"checkbox"
selected
value=
"{{ d.id }}"
>
{{ d.name }} {% if d.comment %} --- {{ d.comment }} {% endif %}
</option>
{% else %}
<option
type=
"checkbox"
value=
"{{ d.id }}"
>
{{ d.name }} {% if d.comment %} --- {{ d.comment }} {% endif %}
</option>
{% endif %}
{% endfor %}
</select>
</div>
</div>
{% endifequal %}
{% ifequal session_role_id 1 %}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
所属部门
<span
class=
"red-fonts"
>
*
</span>
</label>
<input
type=
"text"
name=
"j_dept"
value=
"{{ dept.id }}"
style=
"display: none"
>
<div
class=
"col-sm-8"
><input
type=
"text"
value=
"{{ dept.name }}"
class=
"form-control"
readonly=
"readonly"
></div>
</div>
{% endifequal %}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"j_group"
class=
"col-lg-2 control-label"
>
所属主机组
</label>
<div
class=
"col-sm-8"
>
<select
id=
"j_group"
name=
"j_group"
class=
"form-control m-b"
multiple
size=
"10"
>
{% for g in egroup %}
{% if g in e_group %}
<option
type=
"checkbox"
value=
"{{ g.id }}"
selected
>
{{ g.name }} {% if g.comment %} --- {{ g.comment }} {% endif %}
</option>
{% else %}
<option
type=
"checkbox"
value=
"{{ g.id }}"
>
{{ g.name }} {% if g.comment %} --- {{ g.comment }} {% endif %}
</option>
{% endif %}
{% endfor %}
</select>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
是否激活
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
>
{% for a,active in actives.items %}
{% ifequal a post.is_active %}
<div
class=
"radio i-checks"
><label>
<input
type=
"radio"
checked
value=
"{{ a }}"
name=
"j_active"
>
<i>
{{ active }}
</i></label></div>
{% else %}
<div
class=
"radio i-checks"
><label>
<input
type=
"radio"
value=
"{{ a }}"
name=
"j_active"
>
<i>
{{ active }}
</i></label></div>
{% endifequal %}
{% endfor %}
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
><input
type=
"text"
placeholder=
"hadoop01"
value=
"{{ post.comment }}"
name=
"j_comment"
class=
"form-control"
></div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<button
class=
"btn btn-white"
type=
"submit"
>
重置
</button>
<button
class=
"btn btn-primary"
type=
"submit"
style=
"display: i"
>
提交
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
var
showFlag
=
{};
function
show
(
o
){
showFlag
[
o
.
name
]
=
o
.
value
;
if
(
showFlag
.
j_type
==
"M"
){
document
.
getElementById
(
"type"
).
style
.
display
=
""
;
}
else
{
document
.
getElementById
(
"type"
).
style
.
display
=
"none"
;
}};
$
(
'#assetForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
rules
:
{
check_ip
:
[
/^
(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])(\.(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])){3}
$/
,
'ip地址不正确'
],
check_port
:
[
/^
\d{1,5}
$/
,
'端口号不正确'
],
type_m
:
function
(
element
){
return
$
(
"#M"
).
is
(
":checked"
);
}
},
fields
:
{
"j_ip"
:
{
rule
:
"required;check_ip"
,
tip
:
"输入IP"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
},
"j_port"
:
{
rule
:
"required;check_port"
,
tip
:
"输入端口号"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
},
"j_idc"
:
{
rule
:
"required"
,
tip
:
"选择IDC"
,
ok
:
""
,
msg
:
{
checked
:
"必须填写!"
}
},
"j_dept"
:
{
rule
:
"required"
,
tip
:
"选择部门"
,
ok
:
""
,
msg
:
{
checked
:
"至少选择一个部门"
}
},
"j_user"
:
{
rule
:
"required(type_m)"
,
tip
:
"普通用户名"
,
ok
:
""
,
msg
:
{
required
:
"请填写用户名"
}
},
"j_password"
:
{
rule
:
"required(type_m);length[6~100]"
,
tip
:
"密码6-16位"
,
ok
:
""
,
msg
:
{
required
:
"6-16位"
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
</script>
{% endblock %}
\ No newline at end of file
templates/jasset/idc_add.html
deleted
100644 → 0
View file @
4eb78e15
{% extends 'base.html' %}
{% 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
id=
"ibox-content"
class=
"ibox-title"
>
<h5>
填写IDC基本信息
</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"
>
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
{% endif %}
{% if smg %}
<div
class=
"alert alert-success text-center"
>
{{ smg }}
</div>
{% endif %}
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
IDC名
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
><input
type=
"text"
value=
"{{ idc.name }}"
placeholder=
"北京联通"
name=
"j_idc"
class=
"form-control"
></div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
><input
type=
"text"
value=
"{{ idc.comment }}"
placeholder=
"核心联通机房"
name=
"j_comment"
class=
"form-control"
></div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<button
class=
"btn btn-white"
type=
"submit"
>
重置
</button>
<button
class=
"btn btn-primary"
type=
"sumbit"
>
提交
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
'#assetForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
fields
:
{
"j_idc"
:
{
rule
:
"required"
,
tip
:
"输入IDC名"
,
ok
:
""
,
msg
:
{
required
:
"IDC名必须填写!"
},
data
:
{
'data-ok'
:
"主机名可以使用"
,
'data-msg-required'
:
'主机名已正确'
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
</script>
{% endblock %}
\ No newline at end of file
templates/jasset/idc_detail.html
deleted
100644 → 0
View file @
4eb78e15
{% 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-12"
>
<div
class=
"ibox float-e-margins"
id=
"all"
>
<div
class=
"ibox-title"
>
<h5>
IDC
<span
class=
"text-info"
>
{{ idc.name }}
</span>
详细信息列表
</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"
>
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
{% endif %}
{% if smg %}
<div
class=
"alert alert-success text-center"
>
{{ smg }}
</div>
{% endif %}
<div
class=
""
>
<a
target=
"_blank"
href=
"/jasset/host_add"
class=
"btn btn-sm btn-primary "
>
添加主机
</a>
</div>
<form
id=
"contents_form"
name=
"contents_form"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
name=
"editable"
>
<thead>
<tr>
<th
class=
"text-center"
><input
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('contents_form')"
></th>
<th
class=
"text-center"
name=
"j_ip"
>
IP地址
</th>
<th
class=
"text-center"
>
端口号
</th>
<th
class=
"text-center"
name=
"j_type"
>
登录方式
</th>
<th
class=
"text-center"
id=
"j_group_name"
value=
"{{ idc_name }}"
>
所属IDC
</th>
<th
class=
"text-center"
>
所属业务组
</th>
<th
class=
"text-center"
>
是否激活
</th>
<th
class=
"text-center"
name=
"j_time"
>
添加时间
</th>
<th
class=
"text-center"
name=
"j_comment"
>
备注
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</thead>
<tbody>
{% for post in contacts.object_list %}
<tr
class=
"gradeX"
>
<td
class=
"text-center"
name=
"j_id"
value=
"{{ post.id }}"
data-editable=
'false'
><input
name=
"id"
value=
"{{ post.id }}"
type=
"checkbox"
class=
"i-checks"
></td>
<td
class=
"text-center"
name=
"j_ip"
>
{{ post.ip }}
</td>
<td
class=
"text-center"
name=
"j_port"
>
{{ post.port }}
</td>
<td
class=
"text-center"
name=
"j_type"
>
{{ post.login_type|get_login_type }}
</td>
<td
class=
"text-center"
name=
"j_idc"
>
{{ post.idc.name }}
</td>
<td
class=
"text-center"
name=
"j_dept"
>
{{ post.dept.all | group_str2 }}
</td>
<td
class=
"text-center"
name=
"j_group"
>
{{ post.bis_group.all | group_str2_all }}
</td>
<td
class=
"text-center"
name=
"j_active"
>
{{ post.is_active|bool2str }}
</td>
<td
class=
"text-center"
name=
"j_comment"
>
{{ post.comment }}
</td>
<td
class=
"text-center"
data-editable=
'false'
>
<a
href=
"/jasset/host_detail/?id={{ post.id }}"
class=
"btn btn-xs btn-primary"
>
详情
</a>
{% ifnotequal session_role_id 0 %}
<a
href=
"/jasset/host_edit/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/host_del/{{ post.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
{% endifnotequal %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
<input
type=
"button"
id=
"del_button"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除"
onclick=
"del('contents_form')"
/>
<input
type=
"button"
id=
"alter_button"
class=
"btn btn-warning btn-sm"
name=
"alter_button"
value=
"修改"
onclick=
"alter('contents_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 keyword %}
{% if contacts.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?keyword={{ keyword }}&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 %}
{% ifequal show_first 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page=1&id={{ idc.id }}"
title=
"第1页"
>
1...
</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page={{ page }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page={{ page }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page={{ p.num_pages }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
...{{ p.num_pages }}
</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?keyword={{ keyword }}&page={{ contacts.next_page_number }}&id={{ idc.id }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
{% else %}
{% if contacts.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?page={{ contacts.previous_page_number }}&id={{ idc.id }}"
>
Previous
</a>
</li>
{% else %}
<li
class=
"paginate_button previous disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"#"
>
Previous
</a>
</li>
{% endif %}
{% ifequal show_first 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page=1&id={{ idc.id }}"
title=
"第1页"
>
1...
</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ p.num_pages }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
...{{ p.num_pages }}
</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?page={{ contacts.next_page_number }}&id={{ idc.id }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
{% endif %}
</ul>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
document
).
ready
(
function
(){
$
(
'#editable'
).
editableTableWidget
();
});
function
alter
(
form
)
{
selectData
=
GetTableDataBox
();
if
(
selectData
[
1
]
!=
0
)
{
$
.
ajax
({
type
:
"post"
,
url
:
"/jasset/host_edit/batch/"
,
data
:
{
"editable"
:
selectData
[
0
],
"len_table"
:
selectData
[
1
]},
success
:
function
(
data
)
{
alert
(
"修改成功"
);
window
.
open
(
"/jasset/host_list/"
,
"_self"
);
}
});
}
}
function
del
(
form
)
{
var
checkboxes
=
document
.
getElementById
(
form
);
var
id_list
=
{};
var
group_name
=
$
(
'#j_group_name'
).
attr
(
"value"
);
console
.
log
(
group_name
);
var
j
=
0
;
for
(
var
i
=
0
;
i
<
checkboxes
.
elements
.
length
;
i
++
)
{
if
(
checkboxes
.
elements
[
i
].
type
==
"checkbox"
&&
checkboxes
.
elements
[
i
].
checked
==
true
&&
checkboxes
.
elements
[
i
].
value
!=
"checkall"
)
{
id_list
[
j
]
=
checkboxes
.
elements
[
i
].
value
;
j
++
;
}
}
if
(
confirm
(
"确定从该IDC中删除"
))
{
$
.
ajax
({
type
:
"POST"
,
url
:
"/jasset/host_del/multi/"
,
data
:
{
"id_list"
:
id_list
,
"len_list"
:
j
,
"group_name"
:
group_name
},
success
:
function
(
data
)
{
window
.
open
(
window
.
location
.
href
,
"_self"
);
}
});
}
}
</script>
{% endblock %}
\ No newline at end of file
templates/jasset/idc_edit.html
deleted
100644 → 0
View file @
4eb78e15
{% extends 'base.html' %}
{% 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
id=
"ibox-content"
class=
"ibox-title"
>
<h5>
填写IDC基本信息
</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"
>
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
{% endif %}
{% if smg %}
<div
class=
"alert alert-success text-center"
>
{{ smg }}
</div>
{% endif %}
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
IDC名
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<input
name=
"id"
type=
"text"
value=
"{{ idc.id }}"
style=
"display: none;"
>
<input
type=
"text"
value=
"{{ idc.name }}"
placeholder=
"北京联通"
name=
"j_idc"
class=
"form-control"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
><input
type=
"text"
value=
"{{ idc.comment }}"
placeholder=
"核心联通机房"
name=
"j_comment"
class=
"form-control"
></div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"groups"
class=
"col-lg-2 control-label"
>
主机
</label>
<div
class=
"col-sm-3"
>
<select
id=
"groups"
name=
"idc_default"
size=
"12"
class=
"form-control m-b"
multiple
>
{% for post in posts %}
<option
value=
"{{ post.id }}"
>
{{ post.ip }}
</option>
{% endfor %}
</select>
</div>
<div
class=
"col-sm-1"
>
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('groups', 'groups_selected')"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move_left('groups_selected', 'groups')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
<div>
<select
id=
"groups_selected"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
>
{% for post in eposts %}
<option
value=
"{{ post.id }}"
>
{{ post.ip }}
</option>
{% endfor %}
</select>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<button
class=
"btn btn-white"
type=
"submit"
>
重置
</button>
<button
class=
"btn btn-primary"
type=
"sumbit"
>
提交
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
'#assetForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
fields
:
{
"j_idc"
:
{
rule
:
"required"
,
tip
:
"输入IDC名"
,
ok
:
""
,
msg
:
{
required
:
"IDC名必须填写!"
},
data
:
{
'data-ok'
:
"主机名可以使用"
,
'data-msg-required'
:
'主机名已正确'
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
</script>
{% endblock %}
\ No newline at end of file
templates/jasset/idc_list.html
deleted
100644 → 0
View file @
4eb78e15
{% 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>
IDC详细信息列表
</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"
>
<div
class=
""
>
{% ifequal session_role_id 2 %}
<a
target=
"_blank"
href=
"/jasset/idc_add"
class=
"btn btn-sm btn-primary "
>
添加IDC
</a>
{% endifequal %}
<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=
"keyword"
placeholder=
"Search"
>
<input
type=
"text"
style=
"display: none"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
type=
"submit"
class=
"btn btn-sm btn-primary"
>
Search
</button>
</div>
</div>
</form>
</div>
<form
id=
"contents_form"
name=
"contents_form"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
{% ifequal session_role_id 2 %}
<th
class=
"text-center"
><input
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('contents_form')"
></th>
{% endifequal %}
<th
class=
"text-center"
>
机房名
</th>
<th
class=
"text-center"
>
主机数量
</th>
<th
class=
"text-center"
>
备注
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</thead>
<tbody>
{% for post in contacts.object_list %}
<tr
class=
"gradeX"
>
{% ifequal session_role_id 2 %}
<td
class=
"text-center"
name=
"j_id"
value=
"{{ post.id }}"
data-editable=
'false'
><input
name=
"id"
value=
"{{ post.id }}"
type=
"checkbox"
class=
"i-checks"
></td>
{% endifequal %}
<td
class=
"text-center"
>
{{ post.name }}
</td>
{% ifequal session_role_id 2 %}
<td
class=
"text-center"
>
<a
href=
"/jasset/idc_detail/?id={{ post.id }}"
>
{{ post.asset_set.count }}
</a>
</td>
{% else %}
<td
class=
"text-center"
>
<a
href=
"/jasset/idc_detail/?id={{ post.id }}"
>
{{ post|get_idc_count:dept }}
</a>
</td>
{% endifequal %}
<td
class=
"text-center"
>
{{ post.comment }}
</td>
<td
class=
"text-center"
>
<a
href=
"/jasset/idc_detail/?id={{ post.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
{% ifequal session_role_id 2 %}
<a
href=
"/jasset/idc_edit/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/idc_del/?id={{ post.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
{% endifequal %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
{% ifequal session_role_id 2 %}
<input
type=
"button"
id=
"del_button"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除"
onclick=
"del('contents_form')"
/>
<!--<input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" />-->
{% endifequal %}
</div>
{% include 'paginator.html' %}
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
function
del
(
form
)
{
var
checkboxes
=
document
.
getElementById
(
form
);
var
id_list
=
{};
var
j
=
0
;
for
(
var
i
=
0
;
i
<
checkboxes
.
elements
.
length
;
i
++
)
{
if
(
checkboxes
.
elements
[
i
].
type
==
"checkbox"
&&
checkboxes
.
elements
[
i
].
checked
==
true
&&
checkboxes
.
elements
[
i
].
value
!=
"checkall"
)
{
id_list
[
j
]
=
checkboxes
.
elements
[
i
].
value
;
j
++
;
}
}
if
(
confirm
(
"确定删除"
))
{
$
.
ajax
({
type
:
"POST"
,
url
:
"/jasset/idc_del/?id=multi"
,
data
:
{
"id_list"
:
id_list
,
"len_list"
:
j
},
success
:
function
(
data
)
{
window
.
open
(
"/jasset/idc_list/"
,
"_self"
);
}
});
}
}
</script>
{% endblock %}
\ No newline at end of file
templates/juser/group_list.html
View file @
8bf9103f
...
@@ -52,7 +52,7 @@
...
@@ -52,7 +52,7 @@
</tr>
</tr>
</thead>
</thead>
<tbody>
<tbody>
{% for group in
contact
s.object_list %}
{% for group in
user_group
s.object_list %}
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<input
type=
"checkbox"
name=
"selected"
value=
"{{ group.id }}"
>
<input
type=
"checkbox"
name=
"selected"
value=
"{{ group.id }}"
>
...
...
templates/juser/user_detail.html
View file @
8bf9103f
...
@@ -109,30 +109,30 @@
...
@@ -109,30 +109,30 @@
<small><i
class=
"fa fa-map-marker"
></i>
这里包含了用户所有的主机组和组下的主机.
</small>
<small><i
class=
"fa fa-map-marker"
></i>
这里包含了用户所有的主机组和组下的主机.
</small>
</div>
</div>
<div
class=
"ibox-content inspinia-timeline"
>
<div
class=
"ibox-content inspinia-timeline"
>
{% for group in user|get_user_asset_group %
}
{# {% for group in user|get_user_asset_group %}#
}
<div
class=
"timeline-item"
>
{#
<div
class=
"timeline-item"
>
#}
<div
class=
"row"
>
{#
<div
class=
"row"
>
#}
<div
class=
"col-xs-3 date"
>
{#
<div
class=
"col-xs-3 date"
>
#}
<i
class=
"fa fa-repeat"
></i>
{#
<i
class=
"fa fa-repeat"
></i>
#}
<b><a
href=
"/jperm/perm_list/?uid={{ user.id }}&agid={{ group.id }}"
>
{{ group.name }}
</a></b>
{#
<b><a
href=
"/jperm/perm_list/?uid={{ user.id }}&agid={{ group.id }}"
>
{{ group.name }}
</a></b>
#}
<br>
{#
<br>
#}
<small
class=
"text-navy"
>
共: {{ group | group_asset_list_count }}台
</small>
{#
<small
class=
"text-navy"
>
共: {{ group | group_asset_list_count }}台
</small>
#}
</div>
{#
</div>
#}
<div
class=
"col-xs-7 content no-top-border"
>
{#
<div
class=
"col-xs-7 content no-top-border"
>
#}
<p
class=
"m-b-xs"
><strong>
{{ group.comment }}
</strong></p>
{#
<p
class=
"m-b-xs"
><strong>
{{ group.comment }}
</strong></p>
#}
<p>
{#
<p>
#}
{% for asset in group|group_asset_list %
}
{# {% for asset in group|group_asset_list %}#
}
{{ asset.ip }}
<br>
{# {{ asset.ip }}
<br>
#}
{% endfor %
}
{# {% endfor %}#
}
</p>
{#
</p>
#}
<p></p>
{#
<p></p>
#}
</div>
{#
</div>
#}
</div>
{#
</div>
#}
</div>
{#
</div>
#}
{% endfor %
}
{# {% endfor %}#
}
{% if not user|get_user_asset_group %
}
{# {% if not user|get_user_asset_group %}#
}
(无)
{# (无)#}
{% endif %
}
{# {% endif %}#
}
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -154,7 +154,8 @@
...
@@ -154,7 +154,8 @@
<img
alt=
"image"
class=
"img-circle"
src=
"/static/img/{{ session_role_id | to_avatar }}.png"
>
<img
alt=
"image"
class=
"img-circle"
src=
"/static/img/{{ session_role_id | to_avatar }}.png"
>
</a>
</a>
<div
class=
"media-body "
>
<div
class=
"media-body "
>
<small
class=
"pull-right"
>
{{ log.start_time|time_delta }}
</small>
{#
<small
class=
"pull-right"
>
{{ log.start_time|time_delta }}
</small>
#}
<small
class=
"pull-right"
>
{{ log.start_time }}
</small>
<strong>
{{ log.user }}
</strong>
登录了
<span
class=
"text-navy"
>
{{ log.host }}.
</span><br>
<strong>
{{ log.user }}
</strong>
登录了
<span
class=
"text-navy"
>
{{ log.host }}.
</span><br>
<small
class=
"text-muted"
>
{{ log.start_time|date:"Y-m-d H:i:s" }}
</small>
<small
class=
"text-muted"
>
{{ log.start_time|date:"Y-m-d H:i:s" }}
</small>
</div>
</div>
...
@@ -177,21 +178,18 @@
...
@@ -177,21 +178,18 @@
<img
alt=
"image"
class=
"img-circle"
src=
"/static/img/{{ session_role_id | to_avatar }}.png"
>
<img
alt=
"image"
class=
"img-circle"
src=
"/static/img/{{ session_role_id | to_avatar }}.png"
>
</a>
</a>
<div
class=
"media-body "
>
<div
class=
"media-body "
>
<small
class=
"pull-right"
>
{{ log.start_time|time_delta }}
</small>
<small
class=
"pull-right"
>
{{ log.start_time }}
</small>
{#
<small
class=
"pull-right"
>
{{ log.start_time|time_delta }}
</small>
#}
<strong>
{{ log.user }}
</strong>
登录了
<span
class=
"text-navy"
>
{{ log.host }}.
</span><br>
<strong>
{{ log.user }}
</strong>
登录了
<span
class=
"text-navy"
>
{{ log.host }}.
</span><br>
<small
class=
"text-muted"
>
{{ log.start_time|date:"Y-m-d H:i:s" }}
</small>
<small
class=
"text-muted"
>
{{ log.start_time|date:"Y-m-d H:i:s" }}
</small>
</div>
</div>
</div>
</div>
{% endfor %}
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
...
templates/juser/user_list.html
View file @
8bf9103f
...
@@ -54,7 +54,7 @@
...
@@ -54,7 +54,7 @@
</tr>
</tr>
</thead>
</thead>
<tbody>
<tbody>
{% for user in
contact
s.object_list %}
{% for user in
user
s.object_list %}
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<input
type=
"checkbox"
name=
"selected"
value=
"{{ user.id }}"
>
<input
type=
"checkbox"
name=
"selected"
value=
"{{ user.id }}"
>
...
@@ -63,7 +63,7 @@
...
@@ -63,7 +63,7 @@
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
title=
"{% for user_group in user.group.all %} {{ user_group.name }} {% endfor %}"
>
{{ user.group.all | group_str2 }}
</td>
<td
class=
"text-center"
title=
"{% for user_group in user.group.all %} {{ user_group.name }} {% endfor %}"
>
{{ user.group.all | group_str2 }}
</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"
><a
href=
"/juser/down_key/?id={{ user.id }}"
>
下载
</a></td>
<td
class=
"text-center"
><a
href=
"/juser/down_key/?id={{ user.id }}"
>
下载
</a></td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<a
href=
"../user_detail/?id={{ user.id }}"
class=
"btn btn-xs btn-primary"
>
详情
</a>
<a
href=
"../user_detail/?id={{ user.id }}"
class=
"btn btn-xs btn-primary"
>
详情
</a>
...
@@ -78,7 +78,7 @@
...
@@ -78,7 +78,7 @@
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_info"
id=
"editable_info"
role=
"status"
aria-live=
"polite"
>
<div
class=
"dataTables_info"
id=
"editable_info"
role=
"status"
aria-live=
"polite"
>
Showing {{
contacts.start_index }} to {{ contact
s.end_index }} of {{ p.count }} entries
Showing {{
users.start_index }} to {{ user
s.end_index }} of {{ p.count }} entries
</div>
</div>
</div>
</div>
{% include 'paginator.html' %}
{% include 'paginator.html' %}
...
@@ -93,25 +93,27 @@
...
@@ -93,25 +93,27 @@
{% block self_head_css_js %}
{% block self_head_css_js %}
<script>
<script>
$
(
document
).
ready
(
function
(){
$
(
document
).
ready
(
function
(){
$
(
".iframe"
).
on
(
'click'
,
function
()
{
{
#
$
(
".iframe"
).
on
(
'click'
,
function
()
{
#
}
var
url
=
$
(
this
).
attr
(
"value"
);
{
#
var
url
=
$
(
this
).
attr
(
"value"
);
#
}
$
.
layer
({
{
#
$
.
layer
({
#
}
type
:
2
,
{
#
type
:
2
,
#
}
title
:
'用户详情'
,
{
#
title
:
'用户详情'
,
#
}
maxmin
:
true
,
{
#
maxmin
:
true
,
#
}
shift
:
'top'
,
{
#
shift
:
'top'
,
#
}
border
:
[
2
,
0.3
,
'#1AB394'
],
{
#
border
:
[
2
,
0.3
,
'#1AB394'
],
#
}
shade
:
[
0.5
,
'#000000'
],
{
#
shade
:
[
0.5
,
'#000000'
],
#
}
shadeClose
:
true
,
{
#
shadeClose
:
true
,
#
}
area
:
[
'800px'
,
'600px'
],
{
#
area
:
[
'800px'
,
'600px'
],
#
}
iframe
:
{
src
:
url
}
{
#
iframe
:
{
src
:
url
}
#
}
})
{
#
})
#
}
});
{
#
});
#
}
var
check_array
=
[];
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"
))
});
$
.
post
(
"/juser/user_del_ajax/"
,
$
.
post
(
"/juser/user_del_ajax/"
,
{
ids
:
check_array
.
join
(
","
)},
{
ids
:
check_array
.
join
(
","
)},
function
(
data
){
function
(
data
){
...
...
templates/nav.html
View file @
8bf9103f
...
@@ -18,12 +18,10 @@
...
@@ -18,12 +18,10 @@
<li
id=
"jasset"
>
<li
id=
"jasset"
>
<a><i
class=
"fa fa-cube"
></i>
<span
class=
"nav-label"
>
资产管理
</span><span
class=
"fa arrow"
></span></a>
<a><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
class=
"host_add host_add_multi"
><a
href=
"/jasset/host_add/"
>
添加资产
</a></li>
<li
class=
"group_add"
><a
href=
"/jasset/group_add/"
>
添加资产组
</a></li>
<li
class=
"host_list host_detail host_edit"
><a
href=
"/jasset/host_list/"
>
查看资产
<span
class=
"label label-info pull-right"
>
{{ host_active_num }}/{{ host_total_num}}
</span></a></li>
<li
class=
"group_list group_detail group_edit"
><a
href=
"/jasset/group_list/"
>
查看资产组
</a></li>
<li
class=
"idc_add"
><a
href=
"/jasset/idc_add/"
>
添加IDC
</a></li>
<li
class=
"asset_add asset_add_multi"
><a
href=
"/jasset/asset_add/"
>
添加资产
</a></li>
<li
class=
"idc_list idc_detail idc_edit"
><a
href=
"/jasset/idc_list/"
>
查看IDC
</a></li>
<li
class=
"host_list host_detail host_edit"
><a
href=
"/jasset/asset_list/"
>
查看资产
<span
class=
"label label-info pull-right"
>
{{ host_active_num }}/{{ host_total_num}}
</span></a></li>
<li
class=
"group_add"
><a
href=
"/jasset/group_add/"
>
添加主机组
</a></li>
<li
class=
"group_list group_detail group_edit"
><a
href=
"/jasset/group_list/"
>
查看主机组
</a></li>
</ul>
</ul>
</li>
</li>
<li
id=
"jperm"
>
<li
id=
"jperm"
>
...
...
templates/nav_bar_header.html
View file @
8bf9103f
...
@@ -26,11 +26,11 @@
...
@@ -26,11 +26,11 @@
<img
alt=
"image"
class=
"img-circle"
src=
"/static/img/a4.jpg"
>
<img
alt=
"image"
class=
"img-circle"
src=
"/static/img/a4.jpg"
>
</a>
</a>
<div
class=
"media-body"
>
<div
class=
"media-body"
>
<small
class=
"pull-right text-navy"
>
{{ apply.date_add|naturaltime }}
</small>
{#
<small
class=
"pull-right text-navy"
>
{{ apply.date_add|naturaltime }}
</small>
#}
<strong>
{{ apply.applyer }}
</strong><br>
{#
<strong>
{{ apply.applyer }}
</strong><br>
#}
<small
class=
"text-muted"
>
主机组: {{ apply.bisgroup|ast_to_list }}
</small><br/>
{#
<small
class=
"text-muted"
>
主机组: {{ apply.bisgroup|ast_to_list }}
</small><br/>
#}
<small
class=
"text-muted"
>
主机: {{ apply.asset|ast_to_list }}
</small><br/>
{#
<small
class=
"text-muted"
>
主机: {{ apply.asset|ast_to_list }}
</small><br/>
#}
<small
class=
"text-muted"
>
申请时间: {{ apply.date_add|date:"Y-m-d H:i:s" }}
</small>
{#
<small
class=
"text-muted"
>
申请时间: {{ apply.date_add|date:"Y-m-d H:i:s" }}
</small>
#}
</div>
</div>
</div>
</div>
</li>
</li>
...
...
templates/nav_li_profile.html
View file @
8bf9103f
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
<strong
class=
"font-bold"
>
{{ session_user_id | to_name}}
<span
style=
"color: #8095a8"
></span></strong>
<strong
class=
"font-bold"
>
{{ session_user_id | to_name}}
<span
style=
"color: #8095a8"
></span></strong>
</span>
</span>
<span
class=
"text-muted text-xs block"
>
<span
class=
"text-muted text-xs block"
>
{{ session_
role_id | to_role_nam
e }}
<b
class=
"caret"
></b>
{{ session_
user_id | get_rol
e }}
<b
class=
"caret"
></b>
</span>
</span>
</span>
</span>
</a>
</a>
...
...
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