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
1b220326
Unverified
Commit
1b220326
authored
Jul 17, 2019
by
老广
Committed by
GitHub
Jul 17, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2981 from jumpserver/dev
Bugfix (#2980)
parents
887cda32
8ed3bb85
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
54 additions
and
84 deletions
+54
-84
admin_user_create_update.html
apps/assets/templates/assets/admin_user_create_update.html
+0
-2
asset_list.html
apps/assets/templates/assets/asset_list.html
+5
-13
system_user_list.html
apps/assets/templates/assets/system_user_list.html
+6
-39
views.py
apps/jumpserver/views.py
+9
-2
mixin.py
apps/perms/api/mixin.py
+16
-1
user_permission.py
apps/perms/api/user_permission.py
+0
-4
_header_bar.html
apps/templates/_header_bar.html
+0
-3
_granted_assets.html
apps/users/templates/users/_granted_assets.html
+5
-5
user_list.html
apps/users/templates/users/user_list.html
+13
-15
No files found.
apps/assets/templates/assets/admin_user_create_update.html
View file @
1b220326
...
...
@@ -70,8 +70,6 @@ $(document).ready(function () {
{
%
endif
%
}
var
form
=
$
(
"form"
);
var
data
=
form
.
serializeObject
();
console
.
log
(
$
(
"#id_private_key"
).
data
(
"file"
));
data
[
"private_key"
]
=
$
(
"#id_private_key"
).
data
(
'file'
);
var
props
=
{
...
...
apps/assets/templates/assets/asset_list.html
View file @
1b220326
...
...
@@ -346,8 +346,8 @@ $(document).ready(function(){
var
data
=
{
'resources'
:
id_list
};
function
refresh
Tag
()
{
$
(
'#asset_list_table'
).
DataTable
().
ajax
.
reload
(
);
function
refresh
Page
()
{
setTimeout
(
function
()
{
window
.
location
.
reload
();},
300
);
}
function
doDeactive
()
{
...
...
@@ -356,15 +356,11 @@ $(document).ready(function(){
var
obj
=
{
"pk"
:
object_id
,
"is_active"
:
false
};
data
.
push
(
obj
);
});
function
success
()
{
setTimeout
(
function
()
{
window
.
location
.
reload
();},
500
);
}
requestApi
({
url
:
the_url
,
method
:
'PATCH'
,
body
:
JSON
.
stringify
(
data
),
success
:
success
success
:
refreshPage
});
}
function
doActive
()
{
...
...
@@ -373,15 +369,11 @@ $(document).ready(function(){
var
obj
=
{
"pk"
:
object_id
,
"is_active"
:
true
};
data
.
push
(
obj
);
});
function
success
()
{
setTimeout
(
function
()
{
window
.
location
.
reload
();},
300
);
}
requestApi
({
url
:
the_url
,
method
:
'PATCH'
,
body
:
JSON
.
stringify
(
data
),
success
:
success
success
:
refreshPage
});
}
function
doDelete
()
{
...
...
@@ -400,7 +392,7 @@ $(document).ready(function(){
requestApi
({
url
:
url
,
method
:
'DELETE'
,
success
:
refresh
Tag
,
success
:
refresh
Page
,
flash_message
:
false
,
});
var
msg
=
"{% trans 'Asset Deleted.' %}"
;
...
...
apps/assets/templates/assets/system_user_list.html
View file @
1b220326
...
...
@@ -78,43 +78,9 @@ function initTable() {
var
detail_btn
=
'<a href="{% url "assets:system-user-detail" pk=DEFAULT_PK %}">'
+
cellData
+
'</a>'
;
$
(
td
).
html
(
detail_btn
.
replace
(
'{{ DEFAULT_PK }}'
,
rowData
.
id
));
}},
{
#
{
targets
:
6
,
createdCell
:
function
(
td
,
cellData
)
{
#
}
{
#
var
innerHtml
=
""
;
#
}
{
#
var
data
=
cellData
.
reachable
;
#
}
{
#
if
(
data
!==
0
)
{
#
}
{
#
innerHtml
=
"<span class='text-navy'>"
+
data
+
"</span>"
;
#
}
{
#
}
else
{
#
}
{
#
innerHtml
=
"<span>"
+
data
+
"</span>"
;
#
}
{
#
}
#
}
{
#
$
(
td
).
html
(
innerHtml
)
#
}
{
#
}},
#
}
{
#
{
targets
:
7
,
createdCell
:
function
(
td
,
cellData
)
{
#
}
{
#
var
data
=
cellData
.
unreachable
;
#
}
{
#
var
innerHtml
=
""
;
#
}
{
#
if
(
data
!==
0
)
{
#
}
{
#
innerHtml
=
"<span class='text-danger'>"
+
data
+
"</span>"
;
#
}
{
#
}
else
{
#
}
{
#
innerHtml
=
"<span>"
+
data
+
"</span>"
;
#
}
{
#
}
#
}
{
#
$
(
td
).
html
(
'<span href="javascript:void(0);" data-toggle="tooltip" title="'
+
data
+
'">'
+
innerHtml
+
'</span>'
);
#
}
{
#
}},
#
}
{
#
{
targets
:
8
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
#
}
{
#
var
val
=
0
;
#
}
{
#
var
innerHtml
=
""
;
#
}
{
#
var
total
=
rowData
.
assets_amount
;
#
}
{
#
var
reachable
=
cellData
.
reachable
;
#
}
{
#
if
(
total
&&
total
!==
0
)
{
#
}
{
#
val
=
reachable
/
total
*
100
;
#
}
{
#
}
#
}
{
##
}
{
#
if
(
val
===
100
)
{
#
}
{
#
innerHtml
=
"<span class='text-navy'>"
+
val
+
"% </span>"
;
#
}
{
#
}
else
{
#
}
{
#
var
num
=
new
Number
(
val
);
#
}
{
#
innerHtml
=
"<span class='text-danger'>"
+
num
.
toFixed
(
1
)
+
"% </span>"
;
#
}
{
#
}
#
}
{
#
$
(
td
).
html
(
'<span href="javascript:void(0);" data-toggle="tooltip" title="'
+
cellData
+
'">'
+
innerHtml
+
'</span>'
);
#
}
{
#
}},
#
}
{
targets
:
4
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
$
(
td
).
html
(
rowData
.
login_mode_display
);
}},
{
targets
:
7
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
var
update_btn
=
'<a href="{% url "assets:system-user-update" pk=DEFAULT_PK %}" class="btn btn-xs m-l-xs btn-info">{% trans "Update" %}</a>'
.
replace
(
'{{ DEFAULT_PK }}'
,
cellData
);
var
del_btn
=
'<a class="btn btn-xs btn-danger m-l-xs btn_admin_user_delete" data-uid="{{ DEFAULT_PK }}">{% trans "Delete" %}</a>'
.
replace
(
'{{ DEFAULT_PK }}'
,
cellData
);
...
...
@@ -123,8 +89,9 @@ function initTable() {
],
ajax_url
:
'{% url "api-assets:system-user-list" %}'
,
columns
:
[
{
data
:
"id"
},
{
data
:
"name"
},
{
data
:
"username"
},
{
data
:
"protocol"
},
{
data
:
"login_mode_display"
},
{
data
:
"assets_amount"
},
{
data
:
"comment"
},
{
data
:
"id"
}
{
data
:
"id"
},
{
data
:
"name"
},
{
data
:
"username"
},
{
data
:
"protocol"
},
{
data
:
"login_mode"
},
{
data
:
"assets_amount"
,
orderable
:
false
},
{
data
:
"comment"
},
{
data
:
"id"
,
orderable
:
false
}
],
op_html
:
$
(
'#actions'
).
html
()
};
...
...
apps/jumpserver/views.py
View file @
1b220326
...
...
@@ -100,13 +100,19 @@ class IndexView(PermissionsMixin, TemplateView):
return
self
.
session_month
.
values
(
'user'
)
.
distinct
()
.
count
()
def
get_month_inactive_user_total
(
self
):
return
current_org
.
get_org_users
()
.
count
()
-
self
.
get_month_active_user_total
()
count
=
current_org
.
get_org_users
()
.
count
()
-
self
.
get_month_active_user_total
()
if
count
<
0
:
count
=
0
return
count
def
get_month_active_asset_total
(
self
):
return
self
.
session_month
.
values
(
'asset'
)
.
distinct
()
.
count
()
def
get_month_inactive_asset_total
(
self
):
return
Asset
.
objects
.
all
()
.
count
()
-
self
.
get_month_active_asset_total
()
count
=
Asset
.
objects
.
all
()
.
count
()
-
self
.
get_month_active_asset_total
()
if
count
<
0
:
count
=
0
return
count
@staticmethod
def
get_user_disabled_total
():
...
...
@@ -180,6 +186,7 @@ class IndexView(PermissionsMixin, TemplateView):
'week_asset_hot_ten'
:
self
.
get_week_top10_asset
(),
'last_login_ten'
:
self
.
get_last10_sessions
(),
'week_user_hot_ten'
:
self
.
get_week_top10_user
(),
'app'
:
_
(
"Dashboard"
),
}
kwargs
.
update
(
context
)
...
...
apps/perms/api/mixin.py
View file @
1b220326
# -*- coding: utf-8 -*-
#
from
functools
import
reduce
import
uuid
from
hashlib
import
md5
from
django.core.cache
import
cache
from
django.db.models
import
Q
...
...
@@ -186,6 +186,20 @@ class GrantAssetsMixin(LabelFilterMixin):
data
=
self
.
get_serializer_queryset
(
queryset_list
)
return
super
()
.
get_serializer
(
data
,
many
=
True
)
def
filter_queryset_by_id
(
self
,
assets_items
):
i
=
self
.
request
.
query_params
.
get
(
"id"
)
if
not
i
:
return
assets_items
try
:
pk
=
uuid
.
UUID
(
i
)
except
ValueError
:
return
assets_items
assets_map
=
{
asset
[
'id'
]:
asset
for
asset
in
assets_items
}
if
pk
in
assets_map
:
return
[
assets_map
.
get
(
pk
)]
else
:
return
[]
def
search_queryset
(
self
,
assets_items
):
search
=
self
.
request
.
query_params
.
get
(
"search"
)
if
not
search
:
...
...
@@ -221,6 +235,7 @@ class GrantAssetsMixin(LabelFilterMixin):
return
[
assets_map
.
get
(
asset_id
)
for
asset_id
in
assets_ids_search
]
def
filter_queryset
(
self
,
assets_items
):
assets_items
=
self
.
filter_queryset_by_id
(
assets_items
)
assets_items
=
self
.
search_queryset
(
assets_items
)
assets_items
=
self
.
filter_queryset_by_label
(
assets_items
)
assets_items
=
self
.
sort_queryset
(
assets_items
)
...
...
apps/perms/api/user_permission.py
View file @
1b220326
# -*- coding: utf-8 -*-
#
import
time
import
traceback
from
functools
import
reduce
import
uuid
from
django.db.models
import
Q
from
django.shortcuts
import
get_object_or_404
from
rest_framework.views
import
APIView
,
Response
from
rest_framework.generics
import
(
...
...
apps/templates/_header_bar.html
View file @
1b220326
...
...
@@ -110,9 +110,6 @@
<div
class=
"col-sm-10"
>
<h2></h2>
<ol
class=
"breadcrumb"
>
<li>
<a
href=
""
>
{% trans 'Dashboard' %}
</a>
</li>
{% if app %}
<li>
<a>
{{ app }}
</a>
...
...
apps/users/templates/users/_granted_assets.html
View file @
1b220326
...
...
@@ -12,11 +12,11 @@
</div>
<div
class=
"col-lg-9 animated fadeInRight"
>
<div
class=
"mail-box-header"
>
<div
class=
"btn-group"
style=
"float: right"
>
<button
data-toggle=
"dropdown"
class=
"btn btn-default btn-sm labels dropdown-toggle"
>
{% trans 'Label' %}
<span
class=
"caret"
></span></button>
<ul
class=
"dropdown-menu labels-menu"
>
</ul>
</div>
{#
<div
class=
"btn-group"
style=
"float: right"
>
#}
{#
<button
data-toggle=
"dropdown"
class=
"btn btn-default btn-sm labels dropdown-toggle"
>
{% trans 'Label' %}
<span
class=
"caret"
></span></button>
#}
{#
<ul
class=
"dropdown-menu labels-menu"
>
#}
{#
</ul>
#}
{#
</div>
#}
<table
class=
"table table-striped table-bordered table-hover"
id=
"user_assets_table"
>
<thead>
<tr>
...
...
apps/users/templates/users/user_list.html
View file @
1b220326
...
...
@@ -76,10 +76,16 @@ function initTable() {
var
detail_btn
=
'<a href="{% url "users:user-detail" pk=DEFAULT_PK %}">'
+
cellData
+
'</a>'
;
$
(
td
).
html
(
detail_btn
.
replace
(
"{{ DEFAULT_PK }}"
,
rowData
.
id
));
}},
{
targets
:
3
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
$
(
td
).
html
(
rowData
.
role_display
);
}},
{
targets
:
4
,
createdCell
:
function
(
td
,
cellData
)
{
var
innerHtml
=
cellData
.
length
>
20
?
cellData
.
substring
(
0
,
20
)
+
'...'
:
cellData
;
$
(
td
).
html
(
'<span href="javascript:void(0);" data-toggle="tooltip" title="'
+
cellData
+
'">'
+
innerHtml
+
'</span>'
);
}},
{
targets
:
5
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
$
(
td
).
html
(
rowData
.
source_display
);
}},
{
targets
:
6
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
if
(
cellData
)
{
$
(
td
).
html
(
'<i class="fa fa-check text-navy"></i>'
)
...
...
@@ -114,9 +120,9 @@ function initTable() {
ajax_url
:
'{% url "api-users:user-list" %}'
,
columns
:
[
{
data
:
"id"
},
{
data
:
"name"
},
{
data
:
"username"
},
{
data
:
"role
_display"
,
orderable
:
false
},
{
data
:
"role
"
},
{
data
:
"groups_display"
,
orderable
:
false
},
{
data
:
"source
_display"
,
orderable
:
false
},
{
data
:
"source
"
},
{
data
:
"is_valid"
,
orderable
:
false
},
{
data
:
"id"
,
orderable
:
false
}
],
...
...
@@ -209,8 +215,8 @@ $(document).ready(function(){
var
data
=
{
'resources'
:
id_list
};
function
re
freshTag
()
{
$
(
'#user_list_table'
).
DataTable
().
ajax
.
reload
()
function
re
loadPage
()
{
setTimeout
(
function
()
{
window
.
location
.
reload
();},
300
);
}
function
doDeactive
()
{
var
data
=
[];
...
...
@@ -218,15 +224,11 @@ $(document).ready(function(){
var
obj
=
{
"pk"
:
object_id
,
"is_active"
:
false
};
data
.
push
(
obj
);
});
function
success
()
{
setTimeout
(
function
()
{
window
.
location
.
reload
();},
300
);
}
requestApi
({
url
:
the_url
,
method
:
'PATCH'
,
body
:
JSON
.
stringify
(
data
),
success
:
success
success
:
reloadPage
});
}
function
doActive
()
{
...
...
@@ -235,15 +237,11 @@ $(document).ready(function(){
var
obj
=
{
"pk"
:
object_id
,
"is_active"
:
true
};
data
.
push
(
obj
);
});
function
success
()
{
setTimeout
(
function
()
{
window
.
location
.
reload
();},
300
);
}
requestApi
({
url
:
the_url
,
method
:
'PATCH'
,
body
:
JSON
.
stringify
(
data
),
success
:
success
success
:
reloadPage
});
}
function
doDelete
()
{
...
...
@@ -262,7 +260,7 @@ $(document).ready(function(){
requestApi
({
url
:
url
,
method
:
'DELETE'
,
success
:
re
freshTag
,
success
:
re
loadPage
,
flash_message
:
false
,
});
var
msg
=
"{% trans 'User Deleted.' %}"
;
...
...
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