mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-11-02 06:53:37 +00:00
[Update] 调整Luna的树形结构
This commit is contained in:
@@ -13,7 +13,6 @@ logger = get_logger(__file__)
|
||||
|
||||
|
||||
class AssetPermissionUtil:
|
||||
|
||||
@staticmethod
|
||||
def get_user_permissions(user):
|
||||
return AssetPermission.objects.all().valid().filter(users=user)
|
||||
@@ -122,6 +121,24 @@ class AssetPermissionUtil:
|
||||
nodes[node].update(set(_system_users))
|
||||
return nodes
|
||||
|
||||
@classmethod
|
||||
def get_user_nodes_inherit_group(cls, user):
|
||||
nodes = defaultdict(set)
|
||||
groups = user.groups.all()
|
||||
for group in groups:
|
||||
_nodes = cls.get_user_group_nodes(group)
|
||||
for node, system_users in _nodes.items():
|
||||
nodes[node].update(set(system_users))
|
||||
return nodes
|
||||
|
||||
@classmethod
|
||||
def get_user_nodes(cls, user):
|
||||
nodes = cls.get_user_nodes_direct(user)
|
||||
nodes_inherit = cls.get_user_nodes_inherit_group(user)
|
||||
for node, system_users in nodes_inherit.items():
|
||||
nodes[node].update(set(system_users))
|
||||
return nodes
|
||||
|
||||
@classmethod
|
||||
def get_user_nodes_assets_direct(cls, user):
|
||||
assets = defaultdict(set)
|
||||
@@ -164,15 +181,26 @@ 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)
|
||||
_assets = cls.get_user_assets(user)
|
||||
for asset, _system_users in _assets.items():
|
||||
_nodes = asset.get_nodes()
|
||||
in_node = False
|
||||
for node in _nodes:
|
||||
if asset in nodes[node]:
|
||||
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[node][asset] = _system_users
|
||||
nodes[unnode][asset] = _system_users
|
||||
return nodes
|
||||
|
||||
@classmethod
|
||||
|
||||
Reference in New Issue
Block a user