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
f74b15c1
Commit
f74b15c1
authored
Dec 09, 2015
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
perm edit fix
parent
d3fd9e05
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
61 additions
and
56 deletions
+61
-56
connect.py
connect.py
+3
-2
views.py
jperm/views.py
+36
-32
run_websocket.py
run_websocket.py
+11
-9
asset_list.html
templates/jasset/asset_list.html
+1
-0
perm_role_list.html
templates/jperm/perm_role_list.html
+1
-4
perm_rule_edit.html
templates/jperm/perm_rule_edit.html
+8
-8
nav.html
templates/nav.html
+1
-1
No files found.
connect.py
View file @
f74b15c1
...
@@ -78,6 +78,7 @@ class Tty(object):
...
@@ -78,6 +78,7 @@ class Tty(object):
self
.
asset_name
=
asset
.
hostname
self
.
asset_name
=
asset
.
hostname
self
.
ip
=
None
self
.
ip
=
None
self
.
port
=
22
self
.
port
=
22
self
.
ssh
=
None
self
.
channel
=
None
self
.
channel
=
None
self
.
asset
=
asset
self
.
asset
=
asset
self
.
user
=
user
self
.
user
=
user
...
@@ -300,8 +301,7 @@ class Tty(object):
...
@@ -300,8 +301,7 @@ class Tty(object):
username
=
connect_info
.
get
(
'role_name'
),
username
=
connect_info
.
get
(
'role_name'
),
password
=
connect_info
.
get
(
'role_pass'
),
password
=
connect_info
.
get
(
'role_pass'
),
key_filename
=
role_key
,
key_filename
=
role_key
,
look_for_keys
=
False
,
look_for_keys
=
False
)
allow_agent
=
False
)
return
ssh
return
ssh
except
(
paramiko
.
ssh_exception
.
AuthenticationException
,
paramiko
.
ssh_exception
.
SSHException
):
except
(
paramiko
.
ssh_exception
.
AuthenticationException
,
paramiko
.
ssh_exception
.
SSHException
):
logger
.
warning
(
u'使用ssh key
%
s 失败, 尝试只使用密码'
%
role_key
)
logger
.
warning
(
u'使用ssh key
%
s 失败, 尝试只使用密码'
%
role_key
)
...
@@ -319,6 +319,7 @@ class Tty(object):
...
@@ -319,6 +319,7 @@ class Tty(object):
except
socket
.
error
:
except
socket
.
error
:
raise
ServerError
(
'端口可能不对 Connect SSH Socket Port Error, Please Correct it.'
)
raise
ServerError
(
'端口可能不对 Connect SSH Socket Port Error, Please Correct it.'
)
else
:
else
:
self
.
ssh
=
ssh
return
ssh
return
ssh
...
...
jperm/views.py
View file @
f74b15c1
...
@@ -144,25 +144,17 @@ def perm_rule_edit(request):
...
@@ -144,25 +144,17 @@ def perm_rule_edit(request):
# 根据rule_id 取得rule对象
# 根据rule_id 取得rule对象
rule_id
=
request
.
GET
.
get
(
"id"
)
rule_id
=
request
.
GET
.
get
(
"id"
)
rule
=
PermRule
.
objects
.
get
(
id
=
rule_id
)
rule
=
get_object
(
PermRule
,
id
=
rule_id
)
if
request
.
method
==
'GET'
and
rule_id
:
# 渲染数据, 获取所选的rule对象
# 渲染数据, 获取所选的rule对象
rule_comment
=
rule
.
comment
users
=
User
.
objects
.
all
()
users_select
=
rule
.
user
.
all
()
user_groups
=
UserGroup
.
objects
.
all
()
user_groups_select
=
rule
.
user_group
.
all
()
assets
=
Asset
.
objects
.
all
()
assets_select
=
rule
.
asset
.
all
()
asset_groups
=
AssetGroup
.
objects
.
all
()
asset_groups_select
=
rule
.
asset_group
.
all
()
roles
=
PermRole
.
objects
.
all
()
roles_select
=
rule
.
role
.
all
()
if
request
.
method
==
'POST'
and
rule_id
:
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_edit.html'
,
locals
(),
request
)
elif
request
.
method
==
'POST'
and
rule_id
:
# 获取用户选择的 用户,用户组,资产,资产组,用户角色
# 获取用户选择的 用户,用户组,资产,资产组,用户角色
rule_name
=
request
.
POST
.
get
(
'rule_name'
)
rule_name
=
request
.
POST
.
get
(
'rule_name'
)
rule_comment
=
request
.
POST
.
get
(
"rule_comment"
)
rule_comment
=
request
.
POST
.
get
(
"rule_comment"
)
...
@@ -174,8 +166,10 @@ def perm_rule_edit(request):
...
@@ -174,8 +166,10 @@ def perm_rule_edit(request):
assets_obj
=
[
Asset
.
objects
.
get
(
id
=
asset_id
)
for
asset_id
in
assets_select
]
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
]
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]]
group_assets_obj
=
[]
# calc_assets = set(group_assets_obj) | set(assets_obj)
for
asset_group
in
asset_groups_obj
:
group_assets_obj
.
extend
(
list
(
asset_group
.
asset_set
.
all
()))
calc_assets
=
set
(
group_assets_obj
)
|
set
(
assets_obj
)
# 授权资产和资产组包含的资产
# 获取需要授权的用户列表
# 获取需要授权的用户列表
users_obj
=
[
User
.
objects
.
get
(
id
=
user_id
)
for
user_id
in
users_select
]
users_obj
=
[
User
.
objects
.
get
(
id
=
user_id
)
for
user_id
in
users_select
]
...
@@ -185,20 +179,30 @@ def perm_rule_edit(request):
...
@@ -185,20 +179,30 @@ def perm_rule_edit(request):
# 获取授予的角色列表
# 获取授予的角色列表
roles_obj
=
[
PermRole
.
objects
.
get
(
id
=
role_id
)
for
role_id
in
roles_select
]
roles_obj
=
[
PermRole
.
objects
.
get
(
id
=
role_id
)
for
role_id
in
roles_select
]
need_push_asset
=
set
()
try
:
for
role
in
roles_obj
:
asset_no_push
=
get_role_push_host
(
role
=
role
)[
0
]
# 获取某角色已经推送的资产
need_push_asset
.
update
(
set
(
calc_assets
)
-
set
(
asset_no_push
))
if
need_push_asset
:
raise
ServerError
(
u'没有推送角色
%
s 的主机
%
s'
%
(
role
.
name
,
','
.
join
([
asset
.
hostname
for
asset
in
need_push_asset
])))
# 仅授权成功的,写回数据库(授权规则,用户,用户组,资产,资产组,用户角色)
# 仅授权成功的,写回数据库(授权规则,用户,用户组,资产,资产组,用户角色)
rule
.
user
=
users_obj
rule
.
user
=
users_obj
rule
.
user_group
=
user_groups_obj
rule
.
user_group
=
user_groups_obj
rule
.
asset
=
assets_obj
rule
.
asset
=
assets_obj
rule
.
asset_group
=
asset_groups_obj
rule
.
asset_group
=
asset_groups_obj
rule
.
role
=
roles_obj
rule
.
role
=
roles_obj
rule
.
name
=
rule_name
rule
.
name
=
rule_name
rule
.
comment
=
rule
.
comment
rule
.
comment
=
rule
.
comment
rule
.
save
()
rule
.
save
()
msg
=
u"更新授权规则:
%
s成功"
%
rule
.
name
msg
=
u"更新授权规则:
%
s"
%
rule
.
name
except
ServerError
,
e
:
error
=
e
return
HttpResponseRedirect
(
'/jperm/rule/'
)
return
my_render
(
'jperm/perm_rule_edit.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
@require_role
(
'admin'
)
...
...
run_websocket.py
View file @
f74b15c1
...
@@ -296,6 +296,8 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
...
@@ -296,6 +296,8 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
self
.
log
=
None
self
.
log
=
None
self
.
id
=
0
self
.
id
=
0
self
.
user
=
None
self
.
user
=
None
self
.
ssh
=
None
self
.
channel
=
None
super
(
WebTerminalHandler
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
super
(
WebTerminalHandler
,
self
)
.
__init__
(
*
args
,
**
kwargs
)
def
check_origin
(
self
,
origin
):
def
check_origin
(
self
,
origin
):
...
@@ -310,7 +312,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
...
@@ -310,7 +312,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
if
asset
:
if
asset
:
roles
=
user_have_perm
(
self
.
user
,
asset
)
roles
=
user_have_perm
(
self
.
user
,
asset
)
logger
.
debug
(
roles
)
logger
.
debug
(
roles
)
logger
.
debug
(
'
rolename
:
%
s'
%
role_name
)
logger
.
debug
(
'
角色
:
%
s'
%
role_name
)
login_role
=
''
login_role
=
''
for
role
in
roles
:
for
role
in
roles
:
if
role
.
name
==
role_name
:
if
role
.
name
==
role_name
:
...
@@ -329,8 +331,8 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
...
@@ -329,8 +331,8 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
login_role
.
name
))
login_role
.
name
))
self
.
term
=
WebTty
(
self
.
user
,
asset
,
login_role
,
login_type
=
'web'
)
self
.
term
=
WebTty
(
self
.
user
,
asset
,
login_role
,
login_type
=
'web'
)
self
.
term
.
remote_ip
=
self
.
request
.
remote_ip
self
.
term
.
remote_ip
=
self
.
request
.
remote_ip
ssh
=
self
.
term
.
get_connection
()
s
elf
.
s
sh
=
self
.
term
.
get_connection
()
self
.
term
.
channel
=
ssh
.
invoke_shell
(
term
=
'xterm'
)
self
.
channel
=
self
.
ssh
.
invoke_shell
(
term
=
'xterm'
)
WebTerminalHandler
.
tasks
.
append
(
MyThread
(
target
=
self
.
forward_outbound
))
WebTerminalHandler
.
tasks
.
append
(
MyThread
(
target
=
self
.
forward_outbound
))
WebTerminalHandler
.
clients
.
append
(
self
)
WebTerminalHandler
.
clients
.
append
(
self
)
...
@@ -363,7 +365,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
...
@@ -363,7 +365,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
self
.
term
.
vim_data
=
''
self
.
term
.
vim_data
=
''
self
.
term
.
data
=
''
self
.
term
.
data
=
''
self
.
term
.
input_mode
=
False
self
.
term
.
input_mode
=
False
self
.
term
.
channel
.
send
(
data
[
'data'
])
self
.
channel
.
send
(
data
[
'data'
])
def
on_close
(
self
):
def
on_close
(
self
):
logger
.
debug
(
'Websocket: Close request'
)
logger
.
debug
(
'Websocket: Close request'
)
...
@@ -386,9 +388,9 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
...
@@ -386,9 +388,9 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
data
=
''
data
=
''
pre_timestamp
=
time
.
time
()
pre_timestamp
=
time
.
time
()
while
True
:
while
True
:
r
,
w
,
e
=
select
.
select
([
self
.
term
.
channel
,
sys
.
stdin
],
[],
[])
r
,
w
,
e
=
select
.
select
([
self
.
channel
,
sys
.
stdin
],
[],
[])
if
self
.
term
.
channel
in
r
:
if
self
.
channel
in
r
:
recv
=
self
.
term
.
channel
.
recv
(
1024
)
recv
=
self
.
channel
.
recv
(
1024
)
if
not
len
(
recv
):
if
not
len
(
recv
):
return
return
data
+=
recv
data
+=
recv
...
@@ -407,8 +409,8 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
...
@@ -407,8 +409,8 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
data
=
''
data
=
''
except
UnicodeDecodeError
:
except
UnicodeDecodeError
:
pass
pass
finally
:
except
IndexError
:
self
.
close
()
pass
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
tornado
.
options
.
parse_command_line
()
tornado
.
options
.
parse_command_line
()
...
...
templates/jasset/asset_list.html
View file @
f74b15c1
...
@@ -231,6 +231,7 @@
...
@@ -231,6 +231,7 @@
var
dataArray
=
data
.
split
(
','
);
var
dataArray
=
data
.
split
(
','
);
if
(
dataArray
.
length
==
1
&&
data
!=
'error'
){
if
(
dataArray
.
length
==
1
&&
data
!=
'error'
){
var
title
=
'Jumpserver Web Terminal'
+
'<span class="text-info"> '
+
hostname
+
'</span>'
;
var
title
=
'Jumpserver Web Terminal'
+
'<span class="text-info"> '
+
hostname
+
'</span>'
;
console
.
log
(
new_url
+
data
);
layer
.
open
({
layer
.
open
({
type
:
2
,
type
:
2
,
title
:
title
,
title
:
title
,
...
...
templates/jperm/perm_role_list.html
View file @
f74b15c1
...
@@ -50,19 +50,16 @@
...
@@ -50,19 +50,16 @@
<th
class=
"text-center"
>
名称
</th>
<th
class=
"text-center"
>
名称
</th>
<th
class=
"text-center"
>
sudo别名
</th>
<th
class=
"text-center"
>
sudo别名
</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
id=
"edittbody"
>
<tbody
id=
"edittbody"
>
{% for role in roles %}
{% for role in roles %}
<tr
class=
"gradeX"
id=
{{
role
.
id
}}
>
<tr
class=
"gradeX"
id=
{{
role
.
id
}}
>
<td
class=
"text-center"
>
{{ role.name }}
</td>
<td
class=
"text-center"
>
<a
href=
"/jperm/role/perm_role_detail/?id={{ role.id }}"
>
{{ role.name }}
</a>
</td>
<td
class=
"text-center"
>
{{ role | role_contain_which_sudos }}
</td>
<td
class=
"text-center"
>
{{ role | role_contain_which_sudos }}
</td>
<td
class=
"text-center"
>
{{ role.date_added | date:"Y-m-d H:i:s"}}
</td>
<td
class=
"text-center"
>
{{ role.date_added | date:"Y-m-d H:i:s"}}
</td>
<td
class=
"text-center"
>
{{ role.comment }}
</td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<a
href=
"/jperm/role/perm_role_detail/?id={{ role.id }}"
class=
"btn btn-xs btn-primary"
>
详情
</a>
<a
href=
"/jperm/role/perm_role_edit/?id={{ role.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jperm/role/perm_role_edit/?id={{ role.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jperm/role/push/?id={{ role.id }}"
class=
"btn btn-xs btn-warning"
>
推送
</a>
<a
href=
"/jperm/role/push/?id={{ role.id }}"
class=
"btn btn-xs btn-warning"
>
推送
</a>
<button
onclick=
"remove_role({{ role.id }})"
class=
"btn btn-xs btn-danger"
>
删除
</button>
<button
onclick=
"remove_role({{ role.id }})"
class=
"btn btn-xs btn-danger"
>
删除
</button>
...
...
templates/jperm/perm_rule_edit.html
View file @
f74b15c1
...
@@ -36,7 +36,7 @@
...
@@ -36,7 +36,7 @@
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"rulename"
class=
"col-sm-2 control-label"
>
授权名称
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"rulename"
class=
"col-sm-2 control-label"
>
授权名称
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<input
id=
"rulename"
name=
"rulename"
placeholder=
"Rule Name"
type=
"text"
class=
"form-control"
>
<input
id=
"rulename"
name=
"rulename"
placeholder=
"Rule Name"
type=
"text"
class=
"form-control"
value=
{{
rule
.
name
}}
>
</div>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
...
@@ -45,7 +45,7 @@
...
@@ -45,7 +45,7 @@
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
name=
"user"
id=
"user"
data-placeholder=
"用户名"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
<select
name=
"user"
id=
"user"
data-placeholder=
"用户名"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for user in users %}
{% for user in users %}
<option
value=
"{{ user.id }}"
{%
if
user
in
users_select
%}
selected
{%
endif
%}
>
{{ user.name }}
</option>
<option
value=
"{{ user.id }}"
{%
if
user
in
rule
.
user
.
all
%}
selected
{%
endif
%}
>
{{ user.name }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
<span
class=
"help-block m-b-none"
>
用户和用户组必选一个
</span>
<span
class=
"help-block m-b-none"
>
用户和用户组必选一个
</span>
...
@@ -56,7 +56,7 @@
...
@@ -56,7 +56,7 @@
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
name=
"usergroup"
id=
"usergroup"
data-placeholder=
"请选择用户组"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
<select
name=
"usergroup"
id=
"usergroup"
data-placeholder=
"请选择用户组"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for user_group in user_groups %}
{% for user_group in user_groups %}
<option
value=
"{{ user_group.id }}"
{%
if
user_group
in
user_groups_select
%}
selected
{%
endif
%}
>
{{ user_group.name }}
</option>
<option
value=
"{{ user_group.id }}"
{%
if
user_group
in
rule
.
user_group
.
all
%}
selected
{%
endif
%}
>
{{ user_group.name }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
</div>
</div>
...
@@ -67,7 +67,7 @@
...
@@ -67,7 +67,7 @@
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
name=
"asset"
id=
"asset"
data-placeholder=
"请选择资产"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
<select
name=
"asset"
id=
"asset"
data-placeholder=
"请选择资产"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for asset in assets %}
{% for asset in assets %}
<option
value=
"{{ asset.id }}"
{%
if
asset
in
assets_select
%}
selected
{%
endif
%}
>
{{ asset.ip }}
</option>
<option
value=
"{{ asset.id }}"
{%
if
asset
in
rule
.
asset
.
all
%}
selected
{%
endif
%}
>
{{ asset.ip }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
<span
class=
"help-block m-b-none"
>
资产和资产组必选一个
</span>
<span
class=
"help-block m-b-none"
>
资产和资产组必选一个
</span>
...
@@ -78,7 +78,7 @@
...
@@ -78,7 +78,7 @@
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
name=
"assetgroup"
data-placeholder=
"请选择资产组"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
<select
name=
"assetgroup"
data-placeholder=
"请选择资产组"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for asset_group in asset_groups %}
{% for asset_group in asset_groups %}
<option
value=
"{{ asset_group.id }}"
{%
if
asset_group
in
asset_groups_select
%}
selected
{%
endif
%}
>
{{ asset_group.name }}
</option>
<option
value=
"{{ asset_group.id }}"
{%
if
asset_group
in
rule
.
asset_group
.
all
%}
selected
{%
endif
%}
>
{{ asset_group.name }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
</div>
</div>
...
@@ -86,10 +86,10 @@
...
@@ -86,10 +86,10 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"role"
class=
"col-sm-2 control-label"
>
角色
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"role"
class=
"col-sm-2 control-label"
>
角色
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
id=
"role_name"
>
<div
class=
"col-sm-8"
id=
"role_name"
>
<select
name=
"role"
data-placeholder=
"请选择角色"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
<select
name=
"role"
data-placeholder=
"请选择角色"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for role in roles %}
{% for role in roles %}
<option
value=
"{{ role.id }}"
{%
if
role
in
r
oles_select
%}
selected
{%
endif
%}
>
{{ role.name }}
</option>
<option
value=
"{{ role.id }}"
{%
if
role
in
r
ule
.
role
.
all
%}
selected
{%
endif
%}
>
{{ role.name }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
</div>
</div>
...
@@ -99,7 +99,7 @@
...
@@ -99,7 +99,7 @@
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"comment"
class=
"col-sm-2 control-label"
>
备注
</label>
<label
for=
"comment"
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<input
id=
"rule_comment"
name=
"rule_comment"
placeholder=
"Rule Comment"
type=
"text"
class=
"form-control"
value=
"{{ rule
_
comment }}"
>
<input
id=
"rule_comment"
name=
"rule_comment"
placeholder=
"Rule Comment"
type=
"text"
class=
"form-control"
value=
"{{ rule
.
comment }}"
>
</div>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
...
...
templates/nav.html
View file @
f74b15c1
...
@@ -24,7 +24,7 @@
...
@@ -24,7 +24,7 @@
<li
id=
"jperm"
>
<li
id=
"jperm"
>
<a
href=
"#"
><i
class=
"fa fa-edit"
></i>
<span
class=
"nav-label"
>
授权管理
</span><span
class=
"fa arrow"
></span></a>
<a
href=
"#"
><i
class=
"fa fa-edit"
></i>
<span
class=
"nav-label"
>
授权管理
</span><span
class=
"fa arrow"
></span></a>
<ul
class=
"nav nav-second-level"
>
<ul
class=
"nav nav-second-level"
>
<li
class=
"rule perm_rule_add perm_rule_detail"
>
<li
class=
"rule perm_rule_add perm_rule_detail
perm_rule_edit
"
>
<a
href=
"/jperm/rule/"
>
授权规则
</a>
<a
href=
"/jperm/rule/"
>
授权规则
</a>
</li>
</li>
<li
class=
"role"
>
<li
class=
"role"
>
...
...
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