jumpserver/apps/perms/utils/asset/permission.py

49 lines
1.6 KiB
Python
Raw Normal View History

2018-04-07 16:16:37 +00:00
from collections import defaultdict
2019-03-26 11:46:04 +00:00
2018-05-31 11:47:57 +00:00
from django.db.models import Q
2016-09-16 01:38:07 +00:00
from common.utils import get_logger
from perms.models import AssetPermission
from perms.hands import Asset, User, UserGroup
from perms.models.base import BasePermissionQuerySet
2017-03-09 06:55:33 +00:00
logger = get_logger(__file__)
2016-09-16 01:38:07 +00:00
def get_asset_system_users_id_with_actions(asset_perm_queryset: BasePermissionQuerySet, asset: Asset):
nodes = asset.get_nodes()
node_keys = set()
for node in nodes:
ancestor_keys = node.get_ancestor_keys(with_self=True)
node_keys.update(ancestor_keys)
queryset = asset_perm_queryset.filter(
Q(assets=asset) |
Q(nodes__key__in=node_keys)
2019-07-02 14:08:50 +00:00
)
asset_protocols = asset.protocols_as_dict.keys()
values = queryset.filter(
system_users__protocol__in=asset_protocols
).distinct().values_list('system_users', 'actions')
system_users_actions = defaultdict(int)
for system_user_id, actions in values:
if None in (system_user_id, actions):
continue
system_users_actions[system_user_id] |= actions
return system_users_actions
def get_asset_system_users_id_with_actions_by_user(user: User, asset: Asset):
queryset = AssetPermission.objects.filter(
Q(users=user) | Q(user_groups__users=user)
).valid()
return get_asset_system_users_id_with_actions(queryset, asset)
def get_asset_system_users_id_with_actions_by_group(group: UserGroup, asset: Asset):
queryset = AssetPermission.objects.filter(
user_groups=group
).valid()
return get_asset_system_users_id_with_actions(queryset, asset)