mirror of https://github.com/jumpserver/jumpserver
feat: 远程应用支持磁盘挂载
parent
40b119786b
commit
35c6b581e2
|
@ -21,15 +21,17 @@ from rest_framework.exceptions import PermissionDenied
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from applications.models import Application
|
from applications.models import Application
|
||||||
from authentication.signals import post_auth_failed, post_auth_success
|
from authentication.signals import post_auth_failed
|
||||||
from common.utils import get_logger, random_string
|
from common.utils import get_logger, random_string
|
||||||
from common.mixins.api import SerializerMixin
|
from common.mixins.api import SerializerMixin
|
||||||
from common.permissions import IsSuperUserOrAppUser, IsValidUser, IsSuperUser
|
from common.permissions import IsSuperUserOrAppUser, IsValidUser, IsSuperUser
|
||||||
from common.utils.common import get_file_by_arch
|
from common.utils.common import get_file_by_arch
|
||||||
from orgs.mixins.api import RootOrgViewMixin
|
from orgs.mixins.api import RootOrgViewMixin
|
||||||
from common.http import is_true
|
from common.http import is_true
|
||||||
from perms.utils.asset.permission import get_asset_system_user_ids_with_actions_by_user
|
|
||||||
from perms.models.base import Action
|
from perms.models.base import Action
|
||||||
|
from perms.utils.application.permission import validate_permission as app_validate_permission
|
||||||
|
from perms.utils.application.permission import get_application_actions
|
||||||
|
from perms.utils.asset.permission import get_asset_actions
|
||||||
|
|
||||||
from ..serializers import (
|
from ..serializers import (
|
||||||
ConnectionTokenSerializer, ConnectionTokenSecretSerializer,
|
ConnectionTokenSerializer, ConnectionTokenSecretSerializer,
|
||||||
|
@ -100,10 +102,14 @@ class ClientProtocolMixin:
|
||||||
token = self.create_token(user, asset, application, system_user)
|
token = self.create_token(user, asset, application, system_user)
|
||||||
|
|
||||||
# 设置磁盘挂载
|
# 设置磁盘挂载
|
||||||
if drives_redirect and asset:
|
if drives_redirect:
|
||||||
systemuser_actions_mapper = get_asset_system_user_ids_with_actions_by_user(user, asset)
|
actions = 0
|
||||||
actions = systemuser_actions_mapper.get(system_user.id, 0)
|
if asset:
|
||||||
if actions & Action.UPDOWNLOAD:
|
actions = get_asset_actions(user, asset, system_user)
|
||||||
|
elif application:
|
||||||
|
actions = get_application_actions(user, application, system_user)
|
||||||
|
|
||||||
|
if actions & Action.UPDOWNLOAD == Action.UPDOWNLOAD:
|
||||||
options['drivestoredirect:s'] = '*'
|
options['drivestoredirect:s'] = '*'
|
||||||
|
|
||||||
# 全屏
|
# 全屏
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import time
|
import time
|
||||||
|
from functools import reduce
|
||||||
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
||||||
|
@ -79,3 +80,14 @@ def get_application_system_user_ids(user, application):
|
||||||
def has_application_system_permission(user, application, system_user):
|
def has_application_system_permission(user, application, system_user):
|
||||||
system_user_ids = get_application_system_user_ids(user, application)
|
system_user_ids = get_application_system_user_ids(user, application)
|
||||||
return system_user.id in system_user_ids
|
return system_user.id in system_user_ids
|
||||||
|
|
||||||
|
|
||||||
|
def get_application_actions(user, application, system_user):
|
||||||
|
perm_ids = get_user_all_app_perm_ids(user)
|
||||||
|
actions = ApplicationPermission.objects.filter(
|
||||||
|
applications=application, system_users=system_user,
|
||||||
|
id__in=list(perm_ids)
|
||||||
|
).values_list('actions', flat=True)
|
||||||
|
|
||||||
|
actions = reduce(lambda x, y: x | y, actions, 0)
|
||||||
|
return actions
|
||||||
|
|
|
@ -109,3 +109,9 @@ def get_asset_system_user_ids_with_actions_by_group(group: UserGroup, asset: Ass
|
||||||
user_groups=group
|
user_groups=group
|
||||||
).valid().values_list('id', flat=True).distinct()
|
).valid().values_list('id', flat=True).distinct()
|
||||||
return get_asset_system_user_ids_with_actions(asset_perm_ids, asset)
|
return get_asset_system_user_ids_with_actions(asset_perm_ids, asset)
|
||||||
|
|
||||||
|
|
||||||
|
def get_asset_actions(user, asset, system_user):
|
||||||
|
systemuser_actions_mapper = get_asset_system_user_ids_with_actions_by_user(user, asset)
|
||||||
|
actions = systemuser_actions_mapper.get(system_user.id, 0)
|
||||||
|
return actions
|
||||||
|
|
Loading…
Reference in New Issue