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
202aba04
Commit
202aba04
authored
Feb 21, 2019
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] 修改用户页面授权资产
parent
3c2a4703
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
122 additions
and
84 deletions
+122
-84
api.py
apps/perms/api.py
+43
-68
api_urls.py
apps/perms/urls/api_urls.py
+3
-0
utils.py
apps/perms/utils.py
+67
-0
user_group_granted_asset.html
apps/users/templates/users/user_group_granted_asset.html
+9
-16
No files found.
apps/perms/api.py
View file @
202aba04
...
...
@@ -16,7 +16,9 @@ from common.tree import TreeNode, TreeNodeSerializer
from
common.utils
import
get_object_or_none
from
orgs.mixins
import
RootOrgViewMixin
from
orgs.utils
import
set_to_root_org
from
.utils
import
AssetPermissionUtil
from
.utils
import
(
AssetPermissionUtil
,
parse_asset_to_tree_node
,
parse_node_to_tree_node
)
from
.models
import
AssetPermission
from
.hands
import
(
AssetGrantedSerializer
,
User
,
UserGroup
,
Asset
,
Node
,
...
...
@@ -298,71 +300,6 @@ class UserGrantedNodesWithAssetsAsTreeApi(ListAPIView):
self
.
system_user_id
=
request
.
query_params
.
get
(
'system_user'
)
return
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
@staticmethod
def
parse_node_to_tree_node
(
node
):
name
=
'{} ({})'
.
format
(
node
.
value
,
node
.
assets_amount
)
node_serializer
=
serializers
.
GrantedNodeSerializer
(
node
)
data
=
{
'id'
:
node
.
key
,
'name'
:
name
,
'title'
:
name
,
'pId'
:
node
.
parent_key
,
'isParent'
:
True
,
'open'
:
node
.
is_root
(),
'meta'
:
{
'node'
:
node_serializer
.
data
,
'type'
:
'node'
}
}
tree_node
=
TreeNode
(
**
data
)
return
tree_node
@staticmethod
def
parse_asset_to_tree_node
(
node
,
asset
,
system_users
):
system_users_protocol_matched
=
[
s
for
s
in
system_users
if
s
.
protocol
==
asset
.
protocol
]
icon_skin
=
'file'
if
asset
.
platform
.
lower
()
==
'windows'
:
icon_skin
=
'windows'
elif
asset
.
platform
.
lower
()
==
'linux'
:
icon_skin
=
'linux'
system_users
=
[]
for
system_user
in
system_users_protocol_matched
:
system_users
.
append
({
'id'
:
system_user
.
id
,
'name'
:
system_user
.
name
,
'username'
:
system_user
.
username
,
'protocol'
:
system_user
.
protocol
,
'priority'
:
system_user
.
priority
,
'login_mode'
:
system_user
.
login_mode
,
'comment'
:
system_user
.
comment
,
})
data
=
{
'id'
:
str
(
asset
.
id
),
'name'
:
asset
.
hostname
,
'title'
:
asset
.
ip
,
'pId'
:
node
.
key
,
'isParent'
:
False
,
'open'
:
False
,
'iconSkin'
:
icon_skin
,
'meta'
:
{
'system_users'
:
system_users
,
'type'
:
'asset'
,
'asset'
:
{
'id'
:
asset
.
id
,
'hostname'
:
asset
.
hostname
,
'ip'
:
asset
.
ip
,
'port'
:
asset
.
port
,
'protocol'
:
asset
.
protocol
,
'platform'
:
asset
.
platform
,
'domain'
:
None
if
not
asset
.
domain
else
asset
.
domain
.
id
,
'is_active'
:
asset
.
is_active
,
'comment'
:
asset
.
comment
},
}
}
tree_node
=
TreeNode
(
**
data
)
return
tree_node
def
get_permissions
(
self
):
if
self
.
kwargs
.
get
(
'pk'
)
is
None
:
self
.
permission_classes
=
(
IsValidUser
,)
...
...
@@ -381,12 +318,12 @@ class UserGrantedNodesWithAssetsAsTreeApi(ListAPIView):
util
.
filter_permission_with_system_user
(
system_user
=
self
.
system_user_id
)
nodes
=
util
.
get_nodes_with_assets
()
for
node
,
assets
in
nodes
.
items
():
data
=
self
.
parse_node_to_tree_node
(
node
)
data
=
parse_node_to_tree_node
(
node
)
queryset
.
append
(
data
)
if
not
self
.
show_assets
:
continue
for
asset
,
system_users
in
assets
.
items
():
data
=
self
.
parse_asset_to_tree_node
(
node
,
asset
,
system_users
)
data
=
parse_asset_to_tree_node
(
node
,
asset
,
system_users
)
queryset
.
append
(
data
)
queryset
=
sorted
(
queryset
)
return
queryset
...
...
@@ -490,6 +427,44 @@ class UserGroupGrantedNodesWithAssetsApi(ListAPIView):
return
queryset
class
UserGroupGrantedNodesWithAssetsAsTreeApi
(
ListAPIView
):
serializer_class
=
TreeNodeSerializer
permission_classes
=
(
IsOrgAdminOrAppUser
,)
show_assets
=
True
system_user_id
=
None
def
change_org_if_need
(
self
):
if
self
.
request
.
user
.
is_superuser
or
\
self
.
request
.
user
.
is_app
or
\
self
.
kwargs
.
get
(
'pk'
)
is
None
:
set_to_root_org
()
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
show_assets
=
request
.
query_params
.
get
(
'show_assets'
,
'1'
)
==
'1'
self
.
system_user_id
=
request
.
query_params
.
get
(
'system_user'
)
return
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
def
get_queryset
(
self
):
self
.
change_org_if_need
()
user_group_id
=
self
.
kwargs
.
get
(
'pk'
,
''
)
queryset
=
[]
group
=
get_object_or_404
(
UserGroup
,
id
=
user_group_id
)
util
=
AssetPermissionUtil
(
group
)
if
self
.
system_user_id
:
util
.
filter_permission_with_system_user
(
system_user
=
self
.
system_user_id
)
nodes
=
util
.
get_nodes_with_assets
()
for
node
,
assets
in
nodes
.
items
():
data
=
parse_node_to_tree_node
(
node
)
queryset
.
append
(
data
)
if
not
self
.
show_assets
:
continue
for
asset
,
system_users
in
assets
.
items
():
data
=
parse_asset_to_tree_node
(
node
,
asset
,
system_users
)
queryset
.
append
(
data
)
queryset
=
sorted
(
queryset
)
return
queryset
class
UserGroupGrantedNodeAssetsApi
(
ListAPIView
):
permission_classes
=
(
IsOrgAdminOrAppUser
,)
serializer_class
=
AssetGrantedSerializer
...
...
apps/perms/urls/api_urls.py
View file @
202aba04
...
...
@@ -43,6 +43,9 @@ urlpatterns = [
path
(
'user-group/<uuid:pk>/nodes-assets/'
,
api
.
UserGroupGrantedNodesWithAssetsApi
.
as_view
(),
name
=
'user-group-nodes-assets'
),
path
(
'user-group/<uuid:pk>/nodes-assets/tree/'
,
api
.
UserGroupGrantedNodesWithAssetsAsTreeApi
.
as_view
(),
name
=
'user-group-nodes-assets-as-tree'
),
path
(
'user-group/<uuid:pk>/nodes/<uuid:node_id>/assets/'
,
api
.
UserGroupGrantedNodeAssetsApi
.
as_view
(),
name
=
'user-group-node-assets'
),
...
...
apps/perms/utils.py
View file @
202aba04
...
...
@@ -5,6 +5,7 @@ from collections import defaultdict
from
django.db.models
import
Q
from
common.utils
import
get_logger
from
common.tree
import
TreeNode
from
.models
import
AssetPermission
from
.hands
import
Node
...
...
@@ -193,3 +194,69 @@ def sort_assets(assets, order_by='hostname', reverse=False):
else
:
assets
=
sorted
(
assets
,
key
=
lambda
asset
:
getattr
(
asset
,
order_by
),
reverse
=
reverse
)
return
assets
def
parse_node_to_tree_node
(
node
):
from
.
import
serializers
name
=
'{} ({})'
.
format
(
node
.
value
,
node
.
assets_amount
)
node_serializer
=
serializers
.
GrantedNodeSerializer
(
node
)
data
=
{
'id'
:
node
.
key
,
'name'
:
name
,
'title'
:
name
,
'pId'
:
node
.
parent_key
,
'isParent'
:
True
,
'open'
:
node
.
is_root
(),
'meta'
:
{
'node'
:
node_serializer
.
data
,
'type'
:
'node'
}
}
tree_node
=
TreeNode
(
**
data
)
return
tree_node
def
parse_asset_to_tree_node
(
node
,
asset
,
system_users
):
system_users_protocol_matched
=
[
s
for
s
in
system_users
if
s
.
protocol
==
asset
.
protocol
]
icon_skin
=
'file'
if
asset
.
platform
.
lower
()
==
'windows'
:
icon_skin
=
'windows'
elif
asset
.
platform
.
lower
()
==
'linux'
:
icon_skin
=
'linux'
system_users
=
[]
for
system_user
in
system_users_protocol_matched
:
system_users
.
append
({
'id'
:
system_user
.
id
,
'name'
:
system_user
.
name
,
'username'
:
system_user
.
username
,
'protocol'
:
system_user
.
protocol
,
'priority'
:
system_user
.
priority
,
'login_mode'
:
system_user
.
login_mode
,
'comment'
:
system_user
.
comment
,
})
data
=
{
'id'
:
str
(
asset
.
id
),
'name'
:
asset
.
hostname
,
'title'
:
asset
.
ip
,
'pId'
:
node
.
key
,
'isParent'
:
False
,
'open'
:
False
,
'iconSkin'
:
icon_skin
,
'meta'
:
{
'system_users'
:
system_users
,
'type'
:
'asset'
,
'asset'
:
{
'id'
:
asset
.
id
,
'hostname'
:
asset
.
hostname
,
'ip'
:
asset
.
ip
,
'port'
:
asset
.
port
,
'protocol'
:
asset
.
protocol
,
'platform'
:
asset
.
platform
,
'domain'
:
None
if
not
asset
.
domain
else
asset
.
domain
.
id
,
'is_active'
:
asset
.
is_active
,
'comment'
:
asset
.
comment
},
}
}
tree_node
=
TreeNode
(
**
data
)
return
tree_node
apps/users/templates/users/user_group_granted_asset.html
View file @
202aba04
...
...
@@ -72,6 +72,7 @@ function initTable() {
}
else
{
inited
=
true
;
}
url
=
"{% url 'api-perms:user-group-assets' pk=object.id %}"
;
var
options
=
{
ele
:
$
(
'#user_assets_table'
),
columnDefs
:
[
...
...
@@ -106,15 +107,16 @@ function initTable() {
return
asset_table
}
function
onSelected
(
event
,
treeNode
)
{
url
=
'{% url "api-perms:user-group-node-assets" pk=object.id node_id=DEFAULT_PK %}'
;
url
=
url
.
replace
(
"{{ DEFAULT_PK }}"
,
treeNode
.
id
);
setCookie
(
'node_selected'
,
treeNode
.
id
);
asset_table
=
initTable
();
var
node_id
=
treeNode
.
meta
.
node
.
id
;
url
=
url
.
replace
(
"{{ DEFAULT_PK }}"
,
node_id
);
asset_table
.
ajax
.
url
(
url
);
asset_table
.
ajax
.
reload
();
}
function
selectQueryNode
()
{
var
query_node_id
=
$
.
getUrlParam
(
"node"
);
var
cookie_node_id
=
getCookie
(
'node_selected'
);
...
...
@@ -149,25 +151,16 @@ function initTree() {
}
};
var
zNodes
=
[];
$
.
get
(
"{% url 'api-perms:user-group-nodes' pk=object.id %}"
,
function
(
data
,
status
){
$
.
each
(
data
,
function
(
index
,
value
)
{
value
[
"pId"
]
=
value
[
"parent"
];
if
(
value
[
"key"
]
===
"0"
)
{
value
[
"open"
]
=
true
;
}
value
[
"name"
]
=
value
[
"value"
]
});
zNodes
=
data
;
$
.
fn
.
zTree
.
init
(
$
(
"#assetTree"
),
setting
,
zNodes
);
$
.
get
(
"{% url 'api-perms:user-group-nodes-assets-as-tree' pk=object.id %}?show_assets=0"
,
function
(
data
,
status
)
{
$
.
fn
.
zTree
.
init
(
$
(
"#assetTree"
),
setting
,
data
);
zTree
=
$
.
fn
.
zTree
.
getZTreeObj
(
"assetTree"
);
rMenu
=
$
(
"#rMenu"
);
selectQueryNode
();
});
}
$
(
document
).
ready
(
function
()
{
initTree
();
initTable
();
});
</script>
{% endblock %}
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