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
ae0c28ef
Commit
ae0c28ef
authored
Mar 11, 2015
by
guanghongwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
--no commit message
parent
8f163eb6
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
326 additions
and
43 deletions
+326
-43
models.py
jperm/models.py
+10
-2
urls.py
jperm/urls.py
+2
-0
views.py
jperm/views.py
+41
-38
dept_perm_edit.html
templates/jperm/dept_perm_edit.html
+159
-0
dept_perm_list.html
templates/jperm/dept_perm_list.html
+105
-0
perm_add.html
templates/jperm/perm_add.html
+3
-3
nav.html
templates/nav.html
+6
-0
No files found.
jperm/models.py
View file @
ae0c28ef
from
django.db
import
models
from
juser.models
import
UserGroup
from
jasset.models
import
BisGroup
from
juser.models
import
UserGroup
,
DEPT
from
jasset.models
import
Asset
,
BisGroup
class
Perm
(
models
.
Model
):
...
...
@@ -13,6 +13,14 @@ class Perm(models.Model):
return
'
%
s_
%
s'
%
(
self
.
user_group
.
name
,
self
.
asset_group
.
name
)
class
DeptPerm
(
models
.
Model
):
dept
=
models
.
ForeignKey
(
DEPT
)
asset
=
models
.
ForeignKey
(
Asset
)
def
__unicode__
(
self
):
return
'
%
s_
%
s'
%
(
self
.
dept
.
name
,
self
.
asset
.
ip
)
class
CmdGroup
(
models
.
Model
):
name
=
models
.
CharField
(
max_length
=
50
)
cmd
=
models
.
CharField
(
max_length
=
999
)
...
...
jperm/urls.py
View file @
ae0c28ef
...
...
@@ -8,7 +8,9 @@ urlpatterns = patterns('jperm.views',
(
r'^perm_edit/$'
,
'perm_edit'
),
(
r'^perm_add/$'
,
'perm_add'
),
(
r'^dept_perm_edit/$'
,
'dept_perm_edit'
),
(
r'^perm_list/$'
,
'perm_list'
),
(
r'^dept_perm_list/$'
,
'dept_perm_list'
),
(
r'^perm_user_detail/$'
,
'perm_user_detail'
),
# (r'^perm_list_ajax/$', 'perm_list_ajax'),
(
r'^perm_detail/$'
,
'perm_detail'
),
...
...
jperm/views.py
View file @
ae0c28ef
...
...
@@ -3,9 +3,9 @@
from
django.shortcuts
import
render_to_response
from
django.http
import
HttpResponseRedirect
,
HttpResponse
from
django.template
import
RequestContext
from
juser.models
import
User
,
UserGroup
from
juser.models
import
User
,
UserGroup
,
DEPT
from
jasset.models
import
Asset
,
BisGroup
from
jperm.models
import
Perm
,
SudoPerm
,
CmdGroup
from
jperm.models
import
Perm
,
SudoPerm
,
CmdGroup
,
DeptPerm
from
django.core.paginator
import
Paginator
,
EmptyPage
,
InvalidPage
from
django.db.models
import
Q
from
jumpserver.views
import
LDAP_ENABLE
,
ldap_conn
,
CONF
,
page_list_return
,
pages
...
...
@@ -37,7 +37,7 @@ def user_asset_cmd_groups_get(user_groups_select='', asset_groups_select='', cmd
def
perm_add
(
request
):
header_title
,
path1
,
path2
=
u'主机授权添加
.
'
,
u'授权管理'
,
u'授权添加'
header_title
,
path1
,
path2
=
u'主机授权添加'
,
u'授权管理'
,
u'授权添加'
if
request
.
method
==
'GET'
:
user_groups
=
UserGroup
.
objects
.
filter
(
id__gt
=
2
)
...
...
@@ -60,6 +60,32 @@ def perm_add(request):
return
render_to_response
(
'jperm/perm_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
dept_add_asset
(
dept_list
,
asset_list
):
for
dept_id
in
dept_list
:
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
if
dept
:
dept
=
dept
[
0
]
for
asset_id
in
asset_list
:
asset
=
Asset
.
objects
.
filter
(
id
=
asset_id
)
if
asset
:
asset
=
asset
[
0
]
DeptPerm
(
dept
=
dept
,
asset
=
asset
)
.
save
()
def
dept_perm_edit
(
request
):
header_title
,
path1
,
path2
=
u'部门授权添加'
,
u'授权管理'
,
u'部门授权添加'
depts
=
DEPT
.
objects
.
all
()
assets
=
Asset
.
objects
.
all
()
if
request
.
method
==
'POST'
:
dept_select
=
request
.
POST
.
getlist
(
'dept_select'
)
asset_select
=
request
.
POST
.
getlist
(
'asset_select'
)
dept_add_asset
(
dept_select
,
asset_select
)
msg
=
'添加成功'
return
render_to_response
(
'jperm/dept_perm_edit.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
perm_list
(
request
):
header_title
,
path1
,
path2
=
u'主机授权'
,
u'授权管理'
,
u'授权详情'
keyword
=
request
.
GET
.
get
(
'search'
,
''
)
...
...
@@ -71,39 +97,18 @@ def perm_list(request):
return
render_to_response
(
'jperm/perm_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
# def perm_list_ajax(request):
# tab = request.POST.get('tab', 'tab1')
# search = request.POST.get('search', '')
#
# if tab == 'tab1':
# groups = contact_list = UserGroup.objects.filter(name__icontains=search).order_by('type')
# p = paginator = Paginator(contact_list, 10)
#
# try:
# page = int(request.GET.get('page', '1'))
# except ValueError:
# page = 1
#
# try:
# contacts = paginator.page(page)
# except (EmptyPage, InvalidPage):
# contacts = paginator.page(paginator.num_pages)
#
# else:
# users = contact_list2 = User.objects.filter(name__icontains=search).order_by('id')
# p2 = paginator2 = Paginator(contact_list2, 10)
#
# try:
# page = int(request.GET.get('page', '1'))
# except ValueError:
# page = 1
#
# try:
# contacts2 = paginator2.page(page)
# except (EmptyPage, InvalidPage):
# contacts2 = paginator2.page(paginator2.num_pages)
#
# return render_to_response('jperm/perm_list_ajax.html', locals())
def
dept_perm_list
(
request
):
header_title
,
path1
,
path2
=
'查看部门'
,
'授权管理'
,
'部门授权'
keyword
=
request
.
GET
.
get
(
'search'
)
if
keyword
:
contact_list
=
DEPT
.
objects
.
filter
(
Q
(
name__icontains
=
keyword
)
|
Q
(
comment__icontains
=
keyword
))
.
order_by
(
'name'
)
else
:
contact_list
=
DEPT
.
objects
.
filter
(
id__gt
=
1
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
contact_list
,
request
)
return
render_to_response
(
'jperm/dept_perm_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
perm_group_update
(
perm_id
,
user_group_id_list
,
asset_groups_id_list
):
perm
=
Perm
.
objects
.
filter
(
id
=
perm_id
)
...
...
@@ -145,8 +150,6 @@ def perm_edit(request):
perm_id
=
request
.
POST
.
get
(
'perm_id'
,
''
)
user_group_id_list
=
request
.
POST
.
getlist
(
'user_groups_select'
)
asset_group_id_list
=
request
.
POST
.
getlist
(
'asset_groups_select'
)
# return HttpResponse("perm_id: %s user_group: %s asset_group: %s" % (perm_id, repr(user_group_id_list), repr(asset_group_id_list) ))
# return HttpResponse(perm_group_update(perm_id, user_group_id_list, asset_group_id_list))
perm_group_update
(
perm_id
,
user_group_id_list
,
asset_group_id_list
)
return
HttpResponseRedirect
(
'/jperm/perm_list/'
)
...
...
templates/jperm/dept_perm_edit.html
0 → 100644
View file @
ae0c28ef
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
部门授权添加
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<form
id=
"sudoPerm"
method=
"post"
class=
"form-horizontal"
action=
""
>
{% if error %}
<div
class=
"alert alert-warning text-center"
>
{{ error }}
</div>
{% endif %}
{% if msg %}
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
<div
class=
"row"
>
<div
class=
"form-group"
>
<label
for=
""
class=
"col-sm-2 control-label"
>
部门
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-4"
>
<div>
<select
id=
"depts"
name=
"depts"
class=
"form-control"
size=
"12"
multiple
>
{% for dept in depts %}
<option
value=
"{{ dept.id }}"
>
{{ dept.name }}
</option>
{% endfor %}
</select>
</div>
</div>
<div
class=
"col-sm-1"
>
<div
class=
"btn-group"
style=
"margin-top: 60px;"
>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('depts', 'dept_select')"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('dept_select', 'depts')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
<div>
<select
id=
"dept_select"
name=
"dept_select"
class=
"form-control m-b"
size=
"12"
multiple
>
</select>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
""
class=
"col-sm-2 control-label"
>
主机
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-4"
>
<div>
<select
id=
"assets"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
>
{% for asset in assets %}
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
{% endfor %}
</select>
</div>
</div>
<div
class=
"col-sm-1"
>
<div
class=
"btn-group"
style=
"margin-top: 60px;"
>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('assets', 'asset_select')"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('asset_select', 'assets')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
<div>
<select
id=
"asset_select"
name=
"asset_select"
class=
"form-control m-b"
size=
"12"
multiple
>
</select>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"reset"
>
取消
</button>
<button
id=
"submit_button"
class=
"btn btn-primary"
type=
"submit"
>
确认保存
</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
'#sudoPerm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
fields
:
{
"name"
:
{
rule
:
"required"
,
tip
:
"输入授权名"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
},
"user_groups_select"
:
{
rule
:
"required"
,
tip
:
"选择用户组"
,
ok
:
""
,
msg
:
{
checked
:
"至少选择一个用户组"
}
},
"asset_groups_select"
:
{
rule
:
"required"
,
tip
:
"选择主机组"
,
ok
:
""
,
msg
:
{
checked
:
"至少选择一个主机组"
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
$
(
document
).
ready
(
function
(){
$
(
"#submit_button"
).
click
(
function
(){
$
(
'#users_selected option'
).
each
(
function
(){
$
(
this
).
prop
(
'selected'
,
true
)
})
})
})
</script>
{% endblock %}
\ No newline at end of file
templates/jperm/dept_perm_list.html
0 → 100644
View file @
ae0c28ef
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
查看部门
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/juser/dept_add/"
class=
"btn btn-sm btn-primary "
>
添加部门
</a>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"search"
placeholder=
"Search"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
type=
"submit"
class=
"btn btn-sm btn-primary"
>
Search
</button>
</div>
</div>
</form>
</div>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
<th
class=
"text-center"
>
部门名称
</th>
<th
class=
"text-center"
>
成员数量
</th>
<th
class=
"text-center"
>
授权主机数量
</th>
<th
class=
"text-center"
>
备注
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</thead>
<tbody>
{% for dept in contacts.object_list %}
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ dept.name }}
</td>
<td
class=
"text-center"
>
{{ dept.id | dept_member }}
</td>
<td
class=
"text-center"
>
{{ dept.id | dept_member }}
</td>
<td
class=
"text-center"
>
{{ dept.comment }}
</td>
<td
class=
"text-center"
>
<a
title=
"[ {{ dept.name }} ] 成员信息"
href=
"../dept_detail/?id={{ dept.id }}"
class=
"iframe btn btn-xs btn-primary"
>
主机
</a>
<a
href=
"../dept_perm_edit/?id={{ dept.id }}"
class=
"btn btn-xs btn-info"
>
授权编辑
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_info"
id=
"editable_info"
role=
"status"
aria-live=
"polite"
>
Showing {{ contacts.start_index }} to {{ contacts.end_index }} of {{ p.count }} entries
</div>
</div>
{% include 'paginator.html' %}
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
document
).
ready
(
function
(){
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"70%"
});
var
check_array
=
[]
$
(
'#del_btn'
).
click
(
function
(){
$
(
".gradeX input:checked"
).
each
(
function
()
{
check_array
.
push
(
$
(
this
).
attr
(
"value"
))
})
$
(
".gradeX input:checked"
).
closest
(
"tr"
).
remove
()
$
.
post
(
"/juser/dept_del_ajax/"
,
{
dept_ids
:
check_array
.
join
(
","
)},
function
(
data
){
alert
(
data
)
}
)
})
});
</script>
{% endblock %}
\ No newline at end of file
templates/jperm/perm_add.html
View file @
ae0c28ef
...
...
@@ -50,9 +50,9 @@
<label
for=
""
class=
"col-sm-2 control-label"
>
用户组
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-4"
>
<div>
<select
id=
"user_groups"
name=
"user_groups"
class=
"form-control"
size=
"
5
"
multiple
>
<select
id=
"user_groups"
name=
"user_groups"
class=
"form-control"
size=
"
10
"
multiple
>
{% for user_group in user_groups %}
<option
value=
"{{ user_group.id }}"
>
{{ user_group.name }}
--- {{ user_group.type|group_type_to_str }}
</option>
<option
value=
"{{ user_group.id }}"
>
{{ user_group.name }}
</option>
{% endfor %}
</select>
</div>
...
...
@@ -80,7 +80,7 @@
<label
for=
""
class=
"col-sm-2 control-label"
>
主机组
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-4"
>
<div>
<select
id=
"asset_groups"
name=
"asset_groups"
class=
"form-control m-b"
size=
"
5
"
multiple
>
<select
id=
"asset_groups"
name=
"asset_groups"
class=
"form-control m-b"
size=
"
10
"
multiple
>
{% for asset_group in asset_groups %}
<option
value=
"{{ asset_group.id }}"
>
{{ asset_group.name }}
</option>
{% endfor %}
...
...
templates/nav.html
View file @
ae0c28ef
...
...
@@ -36,6 +36,12 @@
<li
id=
"jperm"
>
<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"
>
<li
id=
"dept_perm_add"
>
<a
href=
"/jperm/dept_perm_add/"
>
部门授权
</a>
</li>
<li
id=
"dept_perm_list"
>
<a
href=
"/jperm/dept_perm_list/"
>
授权查看
</a>
</li>
<li
id=
"perm_add"
>
<a
href=
"/jperm/perm_add/"
>
授权添加
</a>
</li>
...
...
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