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
3f4b5ad4
Commit
3f4b5ad4
authored
May 25, 2018
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] Merge
parent
a96bda8c
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
19 deletions
+32
-19
api.py
apps/perms/api.py
+1
-1
utils.py
apps/perms/utils.py
+31
-18
No files found.
apps/perms/api.py
View file @
3f4b5ad4
...
...
@@ -41,7 +41,7 @@ class AssetPermissionViewSet(viewsets.ModelViewSet):
asset
=
get_object_or_404
(
Asset
,
pk
=
asset_id
)
permissions
=
set
(
queryset
.
filter
(
assets
=
asset
))
for
node
in
asset
.
nodes
.
all
():
inherit_nodes
.
update
(
set
(
node
.
ancestor_with_
node
))
inherit_nodes
.
update
(
set
(
node
.
ancestor_with_
self
))
elif
node_id
:
node
=
get_object_or_404
(
Node
,
pk
=
node_id
)
permissions
=
set
(
queryset
.
filter
(
nodes
=
node
))
...
...
apps/perms/utils.py
View file @
3f4b5ad4
...
...
@@ -8,10 +8,35 @@ import copy
from
common.utils
import
set_or_append_attr_bulk
,
get_logger
from
.models
import
AssetPermission
from
.hands
import
Node
logger
=
get_logger
(
__file__
)
class
Tree
:
def
__init__
(
self
):
self
.
__all_nodes
=
list
(
Node
.
objects
.
all
())
self
.
nodes
=
defaultdict
(
dict
)
self
.
root
=
Node
.
root
()
def
add_node
(
self
,
node
):
if
node
in
self
.
nodes
:
return
else
:
self
.
nodes
[
node
]
=
defaultdict
(
set
)
if
node
.
key
==
self
.
root
.
key
:
return
parent_key
=
':'
.
join
(
node
.
key
.
split
(
':'
)[:
-
1
])
for
n
in
self
.
__all_nodes
:
if
n
.
key
==
parent_key
:
self
.
add_node
(
n
)
break
def
add_nodes
(
self
,
nodes
):
for
node
in
nodes
:
self
.
add_node
(
node
)
class
AssetPermissionUtil
:
@staticmethod
def
get_user_permissions
(
user
):
...
...
@@ -181,27 +206,15 @@ class AssetPermissionUtil:
:param user:
:return: {node: {asset: set(su1, su2)}}
"""
from
assets.models
import
Node
unnode
=
Node
(
value
=
'Unnode'
)
nodes
=
defaultdict
(
dict
)
for
_node
in
cls
.
get_user_nodes
(
user
):
children
=
_node
.
get_family
()
for
node
in
children
:
nodes
[
node
]
=
defaultdict
(
set
)
tree
=
Tree
()
_assets
=
cls
.
get_user_assets
(
user
)
for
asset
,
_system_users
in
_assets
.
items
():
_nodes
=
asset
.
get_nodes
()
in_node
=
False
tree
.
add_nodes
(
_nodes
)
for
node
in
_nodes
:
if
node
in
nodes
:
in_node
=
True
nodes
[
node
][
asset
]
.
update
(
_system_users
)
if
not
in_node
:
if
unnode
in
nodes
:
nodes
[
unnode
][
asset
]
.
update
(
_system_users
)
else
:
nodes
[
unnode
][
asset
]
=
_system_users
return
nodes
tree
.
nodes
[
node
][
asset
]
.
update
(
_system_users
)
return
tree
.
nodes
@classmethod
def
get_system_user_assets
(
cls
,
system_user
):
...
...
@@ -256,7 +269,7 @@ class NodePermissionUtil:
nodes
=
copy
.
deepcopy
(
nodes_directed
)
for
node
,
system_users
in
nodes_directed
.
items
():
for
child
in
node
.
get_
family
():
for
child
in
node
.
get_
all_children_with_self
():
nodes
[
child
]
.
update
(
system_users
)
return
nodes
...
...
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