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
98f0655d
Commit
98f0655d
authored
Nov 29, 2015
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix rule and role bug
parent
3f000b9d
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
161 additions
and
212 deletions
+161
-212
log_api.py
jlog/log_api.py
+2
-2
views.py
jperm/views.py
+85
-102
run_websocket.py
run_websocket.py
+1
-0
asset_list.html
templates/jasset/asset_list.html
+4
-4
idc_list.html
templates/jasset/idc_list.html
+1
-1
log_online.html
templates/jlog/log_online.html
+4
-4
perm_role_add.html
templates/jperm/perm_role_add.html
+11
-11
perm_role_edit.html
templates/jperm/perm_role_edit.html
+2
-2
perm_role_list.html
templates/jperm/perm_role_list.html
+1
-1
perm_role_push.html
templates/jperm/perm_role_push.html
+30
-32
perm_rule_add.html
templates/jperm/perm_rule_add.html
+5
-6
perm_rule_edit.html
templates/jperm/perm_rule_edit.html
+5
-36
nav.html
templates/nav.html
+2
-4
setting.html
templates/setting.html
+8
-7
No files found.
jlog/log_api.py
View file @
98f0655d
...
...
@@ -46,12 +46,12 @@ def scriptToJSON(scriptf, timing=None):
ret
=
[]
with
closing
(
scriptf
):
print
"#
%
s #"
%
scriptf
.
readline
()
# ignore first header line from script file
scriptf
.
readline
()
# ignore first header line from script file
offset
=
0
for
t
in
timing
:
dt
=
scriptf
.
read
(
t
[
1
])
data
=
escapeString
(
dt
)
print
(
'###### (
%
s,
%
s)'
%
(
t
[
1
],
repr
(
data
)))
#
print ('###### (%s, %s)' % (t[1], repr(data)))
offset
+=
t
[
0
]
ret
.
append
((
data
,
offset
))
return
dumps
(
ret
)
...
...
jperm/views.py
View file @
98f0655d
...
...
@@ -69,17 +69,14 @@ def perm_rule_add(request):
# 渲染数据
header_title
,
path1
,
path2
=
"授权规则"
,
"规则管理"
,
"添加规则"
if
request
.
method
==
'GET'
:
# 渲染数据, 获取所有 用户,用户组,资产,资产组,用户角色, 用于添加授权规则
users
=
User
.
objects
.
all
()
user_groups
=
UserGroup
.
objects
.
all
()
assets
=
Asset
.
objects
.
all
()
asset_groups
=
AssetGroup
.
objects
.
all
()
roles
=
PermRole
.
objects
.
all
()
return
my_render
(
'jperm/perm_rule_add.html'
,
locals
(),
request
)
# 渲染数据, 获取所有 用户,用户组,资产,资产组,用户角色, 用于添加授权规则
users
=
User
.
objects
.
all
()
user_groups
=
UserGroup
.
objects
.
all
()
assets
=
Asset
.
objects
.
all
()
asset_groups
=
AssetGroup
.
objects
.
all
()
roles
=
PermRole
.
objects
.
all
()
el
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
# 获取用户选择的 用户,用户组,资产,资产组,用户角色
users_select
=
request
.
POST
.
getlist
(
'user'
,
[])
user_groups_select
=
request
.
POST
.
getlist
(
'usergroup'
,
[])
...
...
@@ -88,45 +85,43 @@ def perm_rule_add(request):
roles_select
=
request
.
POST
.
getlist
(
'role'
,
[])
rule_name
=
request
.
POST
.
get
(
'rulename'
)
rule_comment
=
request
.
POST
.
get
(
'rule_comment'
)
rule_ssh_key
=
request
.
POST
.
get
(
"use_publicKey"
)
# 获取需要授权的主机列表
assets_obj
=
[
Asset
.
objects
.
get
(
ip
=
asset
)
for
asset
in
assets_select
]
asset_groups_obj
=
[
AssetGroup
.
objects
.
get
(
name
=
group
)
for
group
in
asset_groups_select
]
group_assets_obj
=
[
asset
for
asset
in
[
group
.
asset_set
.
all
()
for
group
in
asset_groups_obj
]]
calc_assets
=
set
(
group_assets_obj
)
|
set
(
assets_obj
)
# 获取需要授权的用户列表
users_obj
=
[
User
.
objects
.
get
(
name
=
user
)
for
user
in
users_select
]
user_groups_obj
=
[
UserGroup
.
objects
.
get
(
name
=
group
)
for
group
in
user_groups_select
]
group_users_obj
=
[
user
for
user
in
[
group
.
user_set
.
all
()
for
group
in
user_groups_obj
]]
calc_users
=
set
(
group_users_obj
)
|
set
(
users_obj
)
# 获取授予的角色列表
roles_obj
=
[
PermRole
.
objects
.
get
(
name
=
role
)
for
role
in
roles_select
]
# 仅授权成功的,写回数据库(授权规则,用户,用户组,资产,资产组,用户角色)
rule
=
PermRule
(
name
=
rule_name
,
comment
=
rule_comment
)
rule
.
save
()
rule
.
user
=
users_obj
rule
.
usergroup
=
user_groups_obj
rule
.
asset
=
assets_obj
rule
.
asset_group
=
asset_groups_obj
rule
.
role
=
roles_obj
rule
.
save
()
msg
=
u"添加授权规则:
%
s"
%
rule
.
name
# 渲染数据
header_title
,
path1
,
path2
=
"授权规则"
,
"规则管理"
,
"查看规则"
rules_list
=
PermRule
.
objects
.
all
()
# TODO: 搜索和分页
keyword
=
request
.
GET
.
get
(
'search'
,
''
)
if
keyword
:
rules_list
=
rules_list
.
filter
(
Q
(
name
=
keyword
))
rules_list
,
p
,
rules
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
rules_list
,
request
)
return
my_render
(
'jperm/perm_rule_list.html'
,
locals
(),
request
)
try
:
rule
=
get_object
(
PermRule
,
name
=
rule_name
)
if
rule
:
raise
ServerError
(
u'授权规则
%
s 已存在'
%
rule_name
)
# 获取需要授权的主机列表
assets_obj
=
[
Asset
.
objects
.
get
(
id
=
asset_id
)
for
asset_id
in
assets_select
]
asset_groups_obj
=
[
AssetGroup
.
objects
.
get
(
id
=
group_id
)
for
group_id
in
asset_groups_select
]
# group_assets_obj = [asset for asset in [group.asset_set.all() for group in asset_groups_obj]]
# calc_assets = set(group_assets_obj) | set(assets_obj)
# 获取需要授权的用户列表
users_obj
=
[
User
.
objects
.
get
(
id
=
user_id
)
for
user_id
in
users_select
]
user_groups_obj
=
[
UserGroup
.
objects
.
get
(
id
=
group_id
)
for
group_id
in
user_groups_select
]
# group_users_obj = [user for user in [group.user_set.all() for group in user_groups_obj]]
# calc_users = set(group_users_obj) | set(users_obj)
# 获取授予的角色列表
roles_obj
=
[
PermRole
.
objects
.
get
(
id
=
role_id
)
for
role_id
in
roles_select
]
# 仅授权成功的,写回数据库(授权规则,用户,用户组,资产,资产组,用户角色)
rule
=
PermRule
(
name
=
rule_name
,
comment
=
rule_comment
)
rule
.
save
()
rule
.
user
=
users_obj
rule
.
user_group
=
user_groups_obj
rule
.
asset
=
assets_obj
rule
.
asset_group
=
asset_groups_obj
rule
.
role
=
roles_obj
rule
.
save
()
msg
=
u"添加授权规则:
%
s"
%
rule
.
name
# 渲染数据
return
HttpResponseRedirect
(
'/jperm/rule/'
)
except
ServerError
,
e
:
error
=
e
return
my_render
(
'jperm/perm_rule_add.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
...
...
@@ -155,7 +150,6 @@ def perm_rule_edit(request):
assets
=
Asset
.
objects
.
all
()
asset_groups
=
AssetGroup
.
objects
.
all
()
roles
=
PermRole
.
objects
.
all
()
return
my_render
(
'jperm/perm_rule_edit.html'
,
locals
(),
request
)
elif
request
.
method
==
'POST'
and
rule_id
:
...
...
@@ -168,24 +162,23 @@ def perm_rule_edit(request):
asset_groups_select
=
request
.
POST
.
getlist
(
'assetgroup'
,
[])
roles_select
=
request
.
POST
.
getlist
(
'role'
,
[])
# 获取需要授权的主机列表
assets_obj
=
[
Asset
.
objects
.
get
(
ip
=
asset
)
for
asset
in
assets_select
]
asset_groups_obj
=
[
AssetGroup
.
objects
.
get
(
name
=
group
)
for
group
in
asset_groups_select
]
group_assets_obj
=
[
asset
for
asset
in
[
group
.
asset_set
.
all
()
for
group
in
asset_groups_obj
]]
calc_assets
=
set
(
group_assets_obj
)
|
set
(
assets_obj
)
assets_obj
=
[
Asset
.
objects
.
get
(
id
=
asset_id
)
for
asset_id
in
assets_select
]
asset_groups_obj
=
[
AssetGroup
.
objects
.
get
(
id
=
group_id
)
for
group_id
in
asset_groups_select
]
# group_assets_obj = [asset for asset in [group.asset_set.all() for group in asset_groups_obj]]
# calc_assets = set(group_assets_obj) | set(assets_obj)
# 获取需要授权的用户列表
users_obj
=
[
User
.
objects
.
get
(
name
=
user
)
for
user
in
users_select
]
user_groups_obj
=
[
UserGroup
.
objects
.
get
(
name
=
group
)
for
group
in
user_groups_select
]
group_users_obj
=
[
user
for
user
in
[
group
.
user_set
.
all
()
for
group
in
user_groups_obj
]]
calc_users
=
set
(
group_users_obj
)
|
set
(
users_obj
)
users_obj
=
[
User
.
objects
.
get
(
id
=
user_id
)
for
user_id
in
users_select
]
user_groups_obj
=
[
UserGroup
.
objects
.
get
(
id
=
group_id
)
for
group_id
in
user_groups_select
]
#
group_users_obj = [user for user in [group.user_set.all() for group in user_groups_obj]]
#
calc_users = set(group_users_obj) | set(users_obj)
# 获取授予的角色列表
roles_obj
=
[
PermRole
.
objects
.
get
(
name
=
role
)
for
role
in
roles_select
]
roles_obj
=
[
PermRole
.
objects
.
get
(
id
=
role_id
)
for
role_id
in
roles_select
]
# 仅授权成功的,写回数据库(授权规则,用户,用户组,资产,资产组,用户角色)
rule
.
user
=
users_obj
rule
.
usergroup
=
user_groups_obj
rule
.
user
_
group
=
user_groups_obj
rule
.
asset
=
assets_obj
rule
.
asset_group
=
asset_groups_obj
rule
.
role
=
roles_obj
...
...
@@ -194,17 +187,8 @@ def perm_rule_edit(request):
rule
.
save
()
msg
=
u"更新授权规则:
%
s"
%
rule
.
name
# 渲染数据
header_title
,
path1
,
path2
=
"授权规则"
,
"规则管理"
,
"查看规则"
rules_list
=
PermRule
.
objects
.
all
()
# TODO: 搜索和分页
keyword
=
request
.
GET
.
get
(
'search'
,
''
)
if
keyword
:
rules_list
=
rules_list
.
filter
(
Q
(
name
=
keyword
))
rules_list
,
p
,
rules
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
rules_list
,
request
)
return
my_render
(
'jperm/perm_rule_list.html'
,
locals
(),
request
)
return
HttpResponseRedirect
(
'/jperm/rule/'
)
@require_role
(
'admin'
)
...
...
@@ -254,37 +238,37 @@ def perm_role_add(request):
"""
# 渲染数据
header_title
,
path1
,
path2
=
"系统角色"
,
"角色管理"
,
"添加角色"
sudos
=
PermSudo
.
objects
.
all
()
if
request
.
method
==
"GET"
:
default_password
=
get_rand_pass
()
sudos
=
PermSudo
.
objects
.
all
()
return
my_render
(
'jperm/perm_role_add.html'
,
locals
(),
request
)
elif
request
.
method
==
"POST"
:
# 获取参数: name, comment, sudo
name
=
request
.
POST
.
get
(
"role_name"
)
comment
=
request
.
POST
.
get
(
"role_comment"
)
password
=
request
.
POST
.
get
(
"role_password"
)
sudos_name
=
request
.
POST
.
getlist
(
"sudo_name"
)
sudos_obj
=
[
PermSudo
.
objects
.
get
(
name
=
sudo_name
)
for
sudo_name
in
sudos_name
]
encrypt_pass
=
CRYPTOR
.
encrypt
(
password
)
# 生成随机密码,生成秘钥对
key_path
=
gen_keys
()
role
=
PermRole
(
name
=
name
,
comment
=
comment
,
password
=
encrypt_pass
,
key_path
=
key_path
)
role
.
save
()
role
.
sudo
=
sudos_obj
role
.
save
()
msg
=
u"添加角色:
%
s"
%
name
# 渲染 刷新数据
header_title
,
path1
,
path2
=
"系统角色"
,
"角色管理"
,
"查看角色"
roles_list
=
PermRole
.
objects
.
all
()
# TODO: 搜索和分页
keyword
=
request
.
GET
.
get
(
'search'
,
''
)
if
keyword
:
roles_list
=
roles_list
.
filter
(
Q
(
name
=
keyword
))
if
request
.
method
==
"POST"
:
# 获取参数: name, comment
name
=
request
.
POST
.
get
(
"role_name"
,
""
)
comment
=
request
.
POST
.
get
(
"role_comment"
,
""
)
password
=
request
.
POST
.
get
(
"role_password"
,
""
)
key_content
=
request
.
POST
.
get
(
"role_key"
,
""
)
sudo_ids
=
request
.
POST
.
getlist
(
'sudo_name'
)
try
:
if
get_object
(
PermRole
,
name
=
name
):
raise
ServerError
(
'已经存在该用户
%
s'
%
name
)
if
password
:
encrypt_pass
=
CRYPTOR
.
encrypt
(
password
)
else
:
encrypt_pass
=
CRYPTOR
.
encrypt
(
CRYPTOR
.
gen_rand_pass
(
20
))
# 生成随机密码,生成秘钥对
sudos_obj
=
[
get_object
(
PermSudo
,
id
=
sudo_id
)
for
sudo_id
in
sudo_ids
]
if
key_content
:
key_path
=
gen_keys
(
key
=
key_content
)
else
:
key_path
=
gen_keys
()
logger
.
debug
(
'generate role key:
%
s'
%
key_path
)
role
=
PermRole
(
name
=
name
,
comment
=
comment
,
password
=
encrypt_pass
,
key_path
=
key_path
)
role
.
save
()
role
.
sudo
=
sudos_obj
msg
=
u"添加角色:
%
s"
%
name
return
HttpResponseRedirect
(
'/jperm/role/'
)
except
ServerError
,
e
:
error
=
e
return
my_render
(
'jperm/perm_role_add.html'
,
locals
(),
request
)
...
...
@@ -352,6 +336,7 @@ def perm_role_edit(request):
role_id
=
request
.
GET
.
get
(
"id"
)
role
=
PermRole
.
objects
.
get
(
id
=
role_id
)
role_pass
=
CRYPTOR
.
decrypt
(
role
.
password
)
sudo_all
=
PermSudo
.
objects
.
all
()
role_sudos
=
role
.
sudo
.
all
()
if
request
.
method
==
"GET"
:
return
my_render
(
'jperm/perm_role_edit.html'
,
locals
(),
request
)
...
...
@@ -362,7 +347,7 @@ def perm_role_edit(request):
role_password
=
request
.
POST
.
get
(
"role_password"
)
role_comment
=
request
.
POST
.
get
(
"role_comment"
)
role_sudo_names
=
request
.
POST
.
getlist
(
"sudo_name"
)
role_sudos
=
[
PermSudo
.
objects
.
get
(
name
=
sudo_name
)
for
sudo_name
in
role_sudo_names
]
role_sudos
=
[
PermSudo
.
objects
.
get
(
id
=
sudo_id
)
for
sudo_id
in
role_sudo_names
]
key_content
=
request
.
POST
.
get
(
"role_key"
,
""
)
try
:
if
not
role
:
...
...
@@ -380,10 +365,8 @@ def perm_role_edit(request):
logger
.
debug
(
'Recreate role key:
%
s'
%
role
.
key_path
)
# 写入数据库
role
.
name
=
role_name
role
.
password
=
encrypt_role_pass
role
.
comment
=
role_comment
role
.
sudo
=
role_sudos
role
.
save
()
msg
=
u"更新系统角色:
%
s"
%
role
.
name
return
HttpResponseRedirect
(
'/jperm/role/'
)
...
...
run_websocket.py
View file @
98f0655d
...
...
@@ -250,6 +250,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
if
asset
:
roles
=
user_have_perm
(
self
.
user
,
asset
)
logger
.
debug
(
roles
)
logger
.
debug
(
'rolename:
%
s'
%
role_name
)
login_role
=
''
for
role
in
roles
:
if
role
.
name
==
role_name
:
...
...
templates/jasset/asset_list.html
View file @
98f0655d
...
...
@@ -31,7 +31,7 @@
<div
class=
"col-sm-7"
style=
"padding-left: 0px"
>
<label>
<select
name=
"idc"
class=
"form-control m-b"
onchange=
"change_info()"
>
<option
value=
""
>
IDC
机房
</option>
<option
value=
""
>
机房
</option>
{% for idc in idc_all %}
{% ifequal idc.name idc_name %}
<option
value=
"{{idc.name}}"
selected
>
{{ idc.name }}
</option>
...
...
@@ -57,7 +57,7 @@
<label>
<select
name=
"asset_type"
class=
"form-control m-b"
onchange=
"change_info()"
>
<option
value=
""
>
所有
类型
</option>
<option
value=
""
>
资产
类型
</option>
{% for type in asset_types %}
{% ifequal type.0|int2str asset_type %}
<option
value=
"{{ type.0 }}"
selected
>
{{ type.1 }}
</option>
...
...
@@ -70,7 +70,7 @@
<label>
<select
name=
"status"
class=
"form-control m-b"
onchange=
"change_info()"
>
<option
value=
""
>
所有
状态
</option>
<option
value=
""
>
资产
状态
</option>
{% for s in asset_status %}
{% ifequal s.0|int2str status %}
<option
value=
"{{ s.0 }}"
selected
>
{{ s.1 }}
</option>
...
...
@@ -215,7 +215,7 @@
maxmin
:
true
,
shade
:
false
,
area
:
[
'628px'
,
'452px'
],
content
:
new_url
content
:
new_url
+
data
});
//window.open(new_url + data, '', 'location=no, resizeable=no, height=410, width=625, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,status=no');
}
else
if
(
dataArray
.
length
==
'1'
&&
data
==
'error'
){
...
...
templates/jasset/idc_list.html
View file @
98f0655d
...
...
@@ -29,7 +29,7 @@
</div>
<div
class=
"ibox-content"
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/jasset/idc_add"
class=
"btn btn-sm btn-primary "
>
添加
IDC
</a>
<a
target=
"_blank"
href=
"/jasset/idc_add"
class=
"btn btn-sm btn-primary "
>
添加
机房
</a>
<input
type=
"button"
id=
"del_check"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除所选"
/>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
...
...
templates/jlog/log_online.html
View file @
98f0655d
...
...
@@ -97,7 +97,7 @@
<td
class=
"text-center"
>
{{ post.login_type }}
</td>
<td
class=
"text-center"
><a
href=
"/jlog/history/?id={{ post.id }}"
class=
"log_command"
>
统计
</a></td>
<td
class=
"text-center"
><a
class=
"monitor"
file_path=
"{{ post.log_path }}"
>
监控
</a></td>
<td
class=
"text-center"
><input
type=
"button"
id=
"cut"
class=
"btn btn-danger btn-xs"
name=
"cut"
value=
"阻断"
onclick=
'cut("{{ post.pid }}", "{{ post.
remote_ip
}}")'
/></td>
<td
class=
"text-center"
><input
type=
"button"
id=
"cut"
class=
"btn btn-danger btn-xs"
name=
"cut"
value=
"阻断"
onclick=
'cut("{{ post.pid }}", "{{ post.
login_type
}}")'
/></td>
<td
class=
"text-center"
id=
"start_time"
>
{{ post.start_time|date:"Y-m-d H:i:s" }}
</td>
</tr>
{% endfor %}
...
...
@@ -189,9 +189,9 @@
});
});
function
cut
(
num
,
host
){
console
.
log
(
host
);
if
(
host
==
'W
eb'
){
function
cut
(
num
,
login_type
){
console
.
log
(
login_type
);
if
(
login_type
==
'w
eb'
){
var
g_url
=
'{{ web_kill_uri }}'
+
'?id='
+
num
;
}
else
{
var
g_url
=
"/jlog/log_kill/?id="
+
num
;
...
...
templates/jperm/perm_role_add.html
View file @
98f0655d
...
...
@@ -56,11 +56,11 @@
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"sudo"
class=
"col-sm-2 control-label"
>
角色Sudo命令
<
span
class=
"red-fonts"
>
*
</span><
/label>
<label
for=
"sudo"
class=
"col-sm-2 control-label"
>
角色Sudo命令
</label>
<div
class=
"col-sm-8"
id=
"sudo_name"
>
<select
name=
"sudo_name"
data-placeholder=
"请选择Sudo别名"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for sudo in sudos %}
<option
>
{{ sudo.name }}
</option>
<option
value=
"{{ sudo.id }}"
>
{{ sudo.name }}
</option>
{% endfor %}
</select>
</div>
...
...
@@ -93,9 +93,9 @@ $('#roleForm').validator({
theme
:
"yellow_right_effect"
,
rules
:
{
check_name
:
[
/^
\w{2,20}
$/
,
'大小写字母数字和下划线,2-20位'
],
either
:
function
(){
return
$
(
'#role_password'
).
val
()
==
''
}
{
#
either
:
function
(){
#
}
{
#
return
$
(
'#role_password'
).
val
()
==
''
#
}
{
#
}
#
}
},
fields
:
{
...
...
@@ -105,12 +105,12 @@ $('#roleForm').validator({
ok
:
""
,
msg
:
{
required
:
"角色名称必填"
}
},
"role_key"
:
{
rule
:
"required(either)"
,
tip
:
"输入密钥"
,
ok
:
""
,
msg
:
{
required
:
"密码和密钥必填一个!"
}
}
{
#
"role_key"
:
{
#
}
{
#
rule
:
"required(either)"
,
#
}
{
#
tip
:
"输入密钥"
,
#
}
{
#
ok
:
""
,
#
}
{
#
msg
:
{
required
:
"密码和密钥必填一个!"
}
#
}
{
#
}
#
}
},
valid
:
function
(
form
)
{
form
.
submit
();
...
...
templates/jperm/perm_role_edit.html
View file @
98f0655d
...
...
@@ -60,8 +60,8 @@
<label
for=
"sudo"
class=
"col-sm-2 control-label"
>
角色Sudo命令
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
id=
"sudo_name"
>
<select
name=
"sudo_name"
data-placeholder=
"请选择Sudo别名"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for sudo in
role_sudos
%}
<option
selected
>
{{ sudo.name }}
</option>
{% for sudo in
sudo_all
%}
<option
value=
"{{ sudo.id }}"
{%
if
sudo
in
role_sudos
%}
selected
{%
endif
%}
>
{{ sudo.name }}
</option>
{% endfor %}
</select>
</div>
...
...
templates/jperm/perm_role_list.html
View file @
98f0655d
...
...
@@ -33,7 +33,7 @@
<div
class=
"ibox-content"
>
<div
class=
""
>
<a
href=
"/jperm/role/perm_role_add/"
class=
"btn btn-sm btn-primary "
>
添加角色
</a>
<a
href=
"/jperm/role/perm_role_push/"
class=
"btn btn-sm btn-
primary
"
>
推送角色
</a>
<a
href=
"/jperm/role/perm_role_push/"
class=
"btn btn-sm btn-
danger
"
>
推送角色
</a>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"search"
placeholder=
"Search"
>
...
...
templates/jperm/perm_role_push.html
View file @
98f0655d
...
...
@@ -26,7 +26,7 @@
</div>
</div>
<div
class=
"ibox-content"
>
<form
method=
"post"
id=
"
user
Form"
class=
"form-horizontal"
action=
""
>
<form
method=
"post"
id=
"
push
Form"
class=
"form-horizontal"
action=
""
>
{% if error %}
<div
class=
"alert alert-warning text-center"
>
{{ error }}
</div>
{% endif %}
...
...
@@ -34,9 +34,9 @@
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
<div
class=
"form-group"
>
<label
for=
"asset"
class=
"col-sm-2 control-label"
>
资产
<
span
class=
"red-fonts"
>
*
</span><
/label>
<label
for=
"asset"
class=
"col-sm-2 control-label"
>
资产
</label>
<div
class=
"col-sm-8"
>
<select
name=
"assets"
data-placeholder=
"请选择资产"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
<select
name=
"assets"
id=
"assets"
data-placeholder=
"请选择资产"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for asset in assets %}
<option
value=
"{{ asset.ip }}"
>
{{ asset.ip }}
</option>
{% endfor %}
...
...
@@ -45,7 +45,7 @@
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"assetgroup"
class=
"col-sm-2 control-label"
>
资产组
<
span
class=
"red-fonts"
>
*
</span><
/label>
<label
for=
"assetgroup"
class=
"col-sm-2 control-label"
>
资产组
</label>
<div
class=
"col-sm-8"
>
<select
name=
"asset_groups"
data-placeholder=
"请选择资产组"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for asset_group in asset_groups %}
...
...
@@ -68,11 +68,11 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"row"
>
<div
class=
"form-group"
>
<label
for=
"j_group"
class=
"col-sm-2 control-label"
>
使用
秘
钥
</label>
<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"
value=
"1"
id=
"use_publicKey"
name=
"use_publicKey"
>
<input
type=
"checkbox"
value=
"1"
id=
"use_publicKey"
name=
"use_publicKey"
checked
>
</label>
</div>
</div>
...
...
@@ -111,37 +111,35 @@
{% endblock %}
{% block self_footer_js %}
<script>
$
(
document
).
ready
(
function
(){
$
(
"input.role"
).
click
(
function
(){
if
(
$
(
"input.role[value=GA]"
).
is
(
":checked"
)){
$
(
"#admin_groups"
).
css
(
"display"
,
'none'
);
$
(
'#pushForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
rules
:
{
check_name
:
[
/^
\w{2,20}
$/
,
'大小写字母数字和下划线,2-20位'
],
check_asset
:
function
(){
return
$
(
'#assets'
).
val
()
==
null
}
else
{
$
(
"#admin_groups"
).
css
(
"display"
,
'block'
);
}
});
$
(
'#use_password'
).
click
(
function
(){
if
(
$
(
this
).
is
(
':checked'
)){
$
(
'#admin_account_password'
).
css
(
'display'
,
'block'
)
},
fields
:
{
"asset_groups"
:
{
rule
:
"required(check_asset)"
,
tip
:
"输入资产组"
,
ok
:
""
,
msg
:
{
required
:
"资产和资产组必选一个!"
}
},
"roles"
:
{
rule
:
"required"
,
tip
:
"请选择角色"
,
ok
:
""
,
msg
:
{
required
:
"必须选择角色"
}
}
else
{
$
(
'#admin_account_password'
).
css
(
'display'
,
'none'
)
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
});
$
(
'#use_publicKey'
).
click
(
function
(){
if
(
$
(
this
).
is
(
':checked'
)){
$
(
'#admin_account_publicKey'
).
css
(
'display'
,
'block'
)
}
else
{
$
(
'#admin_account_publicKey'
).
css
(
'display'
,
'none'
)
}
});
});
var
config
=
{
'.chosen-select'
:
{},
...
...
templates/jperm/perm_rule_add.html
View file @
98f0655d
...
...
@@ -44,9 +44,8 @@
<label
for=
"user"
class=
"col-sm-2 control-label"
>
用户
</label>
<div
class=
"col-sm-8"
>
<select
name=
"user"
id=
"user"
data-placeholder=
"用户名"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for user in users %}
<option>
{{ user.name }}
</option>
<option
value=
"{{ user.id }}"
>
{{ user.name }}
</option>
{% endfor %}
</select>
<span
class=
"help-block m-b-none"
>
用户和用户组必选一个
</span>
...
...
@@ -58,7 +57,7 @@
<select
name=
"usergroup"
id=
"usergroup"
data-placeholder=
"请选择用户组"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for user_group in user_groups %}
<option
value=
"{{ user_group.
name
}}"
>
{{ user_group.name }}
</option>
<option
value=
"{{ user_group.
id
}}"
>
{{ user_group.name }}
</option>
{% endfor %}
</select>
</div>
...
...
@@ -69,7 +68,7 @@
<div
class=
"col-sm-8"
>
<select
name=
"asset"
id=
"asset"
data-placeholder=
"请选择资产"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for asset in assets %}
<option
value=
"{{ asset.i
p
}}"
>
{{ asset.ip }}
</option>
<option
value=
"{{ asset.i
d
}}"
>
{{ asset.ip }}
</option>
{% endfor %}
</select>
<span
class=
"help-block m-b-none"
>
资产和资产组必选一个
</span>
...
...
@@ -80,7 +79,7 @@
<div
class=
"col-sm-8"
>
<select
name=
"assetgroup"
data-placeholder=
"请选择资产组"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for asset_group in asset_groups %}
<option
value=
"{{ asset_group.
name
}}"
>
{{ asset_group.name }}
</option>
<option
value=
"{{ asset_group.
id
}}"
>
{{ asset_group.name }}
</option>
{% endfor %}
</select>
</div>
...
...
@@ -91,7 +90,7 @@
<div
class=
"col-sm-8"
id=
"role_name"
>
<select
name=
"role"
data-placeholder=
"请选择角色"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for role in roles %}
<option
value=
"{{ role.
name
}}"
>
{{ role.name }}
</option>
<option
value=
"{{ role.
id
}}"
>
{{ role.name }}
</option>
{% endfor %}
</select>
</div>
...
...
templates/jperm/perm_rule_edit.html
View file @
98f0655d
...
...
@@ -45,7 +45,7 @@
<div
class=
"col-sm-8"
>
<select
name=
"user"
data-placeholder=
"用户名"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for user in users %}
<option
value=
"{{ user.
name
}}"
{%
if
user
in
users_select
%}
selected
{%
endif
%}
>
{{ user.name }}
</option>
<option
value=
"{{ user.
id
}}"
{%
if
user
in
users_select
%}
selected
{%
endif
%}
>
{{ user.name }}
</option>
{% endfor %}
</select>
</div>
...
...
@@ -56,7 +56,7 @@
<div
class=
"col-sm-8"
>
<select
name=
"usergroup"
data-placeholder=
"请选择用户组"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for user_group in user_groups %}
<option
value=
"{{ user_group.
name }}"
{%
if
user_group
in
users
_groups_select
%}
selected
{%
endif
%}
>
{{ user_group.name }}
</option>
<option
value=
"{{ user_group.
id }}"
{%
if
user_group
in
user
_groups_select
%}
selected
{%
endif
%}
>
{{ user_group.name }}
</option>
{% endfor %}
</select>
</div>
...
...
@@ -67,7 +67,7 @@
<div
class=
"col-sm-8"
>
<select
name=
"asset"
data-placeholder=
"请选择资产"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for asset in assets %}
<option
value=
"{{ asset.i
p
}}"
{%
if
asset
in
assets_select
%}
selected
{%
endif
%}
>
{{ asset.ip }}
</option>
<option
value=
"{{ asset.i
d
}}"
{%
if
asset
in
assets_select
%}
selected
{%
endif
%}
>
{{ asset.ip }}
</option>
{% endfor %}
</select>
</div>
...
...
@@ -78,7 +78,7 @@
<div
class=
"col-sm-8"
>
<select
name=
"assetgroup"
data-placeholder=
"请选择资产组"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for asset_group in asset_groups %}
<option
value=
"{{ asset_group.
name
}}"
{%
if
asset_group
in
asset_groups_select
%}
selected
{%
endif
%}
>
{{ asset_group.name }}
</option>
<option
value=
"{{ asset_group.
id
}}"
{%
if
asset_group
in
asset_groups_select
%}
selected
{%
endif
%}
>
{{ asset_group.name }}
</option>
{% endfor %}
</select>
</div>
...
...
@@ -89,7 +89,7 @@
<div
class=
"col-sm-8"
>
<select
name=
"role"
data-placeholder=
"请选择角色"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for role in roles %}
<option
value=
"{{ role.
name
}}"
{%
if
role
in
roles_select
%}
selected
{%
endif
%}
>
{{ role.name }}
</option>
<option
value=
"{{ role.
id
}}"
{%
if
role
in
roles_select
%}
selected
{%
endif
%}
>
{{ role.name }}
</option>
{% endfor %}
</select>
</div>
...
...
@@ -118,37 +118,6 @@
{% endblock %}
{% block self_footer_js %}
<script>
$
(
document
).
ready
(
function
(){
$
(
"input.role"
).
click
(
function
(){
if
(
$
(
"input.role[value=GA]"
).
is
(
":checked"
)){
$
(
"#admin_groups"
).
css
(
"display"
,
'none'
);
}
else
{
$
(
"#admin_groups"
).
css
(
"display"
,
'block'
);
}
});
$
(
'#use_password'
).
click
(
function
(){
if
(
$
(
this
).
is
(
':checked'
)){
$
(
'#admin_account_password'
).
css
(
'display'
,
'block'
)
}
else
{
$
(
'#admin_account_password'
).
css
(
'display'
,
'none'
)
}
});
$
(
'#use_publicKey'
).
click
(
function
(){
if
(
$
(
this
).
is
(
':checked'
)){
$
(
'#admin_account_publicKey'
).
css
(
'display'
,
'block'
)
}
else
{
$
(
'#admin_account_publicKey'
).
css
(
'display'
,
'none'
)
}
});
});
var
config
=
{
'.chosen-select'
:
{},
...
...
templates/nav.html
View file @
98f0655d
...
...
@@ -28,14 +28,12 @@
<a
href=
"/jperm/rule/"
>
授权规则
</a>
</li>
<li
class=
"
sudo_list sudo_edit sudo_add cmd_list cmd_edit cmd_add sudo_detail
"
>
<li
class=
"
role
"
>
<a
href=
"/jperm/role/"
>
系统角色
</a>
</li>
<li
class=
"sudo
_list sudo_edit sudo_add cmd_list cmd_edit cmd_add sudo_detail
"
>
<li
class=
"sudo"
>
<a
href=
"/jperm/sudo/"
>
Sudo命令
</a>
</li>
<li
class=
"apply_show online"
><a
href=
"/jperm/apply_show/online/"
>
权限审批
</a></li>
<li
class=
"apply_show online"
><a
href=
"/jperm/log/"
>
授权记录
</a></li>
</ul>
</li>
...
...
templates/setting.html
View file @
98f0655d
...
...
@@ -45,25 +45,26 @@
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
<div
class=
"form-group"
>
<label
for=
"username"
class=
"col-sm-2 control-label"
>
默认
用户名
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"username"
class=
"col-sm-2 control-label"
>
默认
管理用户
<span
class=
"red-fonts"
>
*
</span></label>
<input
name=
"setting"
value=
"default"
style=
"display: none"
>
<div
class=
"col-sm-8"
>
<input
id=
"username"
name=
"username"
placeholder=
"Username"
type=
"text"
value=
"{{ setting_default.field1 }}"
class=
"form-control"
>
<span
class=
"help-block m-b-none"
>
该用户为root或用户NOPASS:ALL sudo权限的用户
</span>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"
port"
class=
"col-sm-2 control-label"
>
默认ssh端口
<span
class=
"red-fonts"
>
*
</span>
</label>
<label
for=
"
key"
class=
"col-sm-2 control-label"
>
默认密码
</label>
<div
class=
"col-sm-8"
>
<input
id=
"port"
name=
"port"
placeholder=
"Port"
type=
"text"
value=
"{{ setting_default.field2 }}"
class=
"form-control"
>
<input
id=
"password"
name=
"password"
placeholder=
"Password"
type=
"password"
class=
"form-control"
>
<span
class=
"help-block m-b-none"
>
如果不修改密码,请留空
</span>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"
key"
class=
"col-sm-2 control-label"
>
默认密码
</label>
<label
for=
"
port"
class=
"col-sm-2 control-label"
>
默认ssh端口
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-8"
>
<input
id=
"password"
name=
"password"
placeholder=
"Password"
type=
"password"
class=
"form-control"
>
<span
class=
"help-block m-b-none"
>
如果不修改密码,请留空
</span>
<input
id=
"port"
name=
"port"
placeholder=
"Port"
type=
"text"
value=
"{{ setting_default.field2 }}"
class=
"form-control"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
...
...
@@ -118,7 +119,7 @@
fields
:
{
"username"
:
{
rule
:
"required;check_name"
,
tip
:
"输入用户名"
,
tip
:
"输入
管理
用户名"
,
ok
:
""
,
msg
:
{
required
:
"用户名称必填"
}
},
...
...
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