mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-11 04:09:45 +00:00
Bugfix (#3232)
* [Update] 拆分user permission * [Update] 修改 ops command * [Update] 修改setting无法生效的问题 * [Update] 修复授权详情-授权资产或节点添加资产失败 * [Bugfix] 修复组织管理员运行命令时的问题 * [Update] 修复命令执行左侧树点击问题
This commit is contained in:
66
apps/perms/api/user_permission/user_permission_assets.py
Normal file
66
apps/perms/api/user_permission/user_permission_assets.py
Normal file
@@ -0,0 +1,66 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
|
||||
from django.shortcuts import get_object_or_404
|
||||
from rest_framework.generics import (
|
||||
ListAPIView, get_object_or_404
|
||||
)
|
||||
|
||||
from common.permissions import IsOrgAdminOrAppUser
|
||||
from common.utils import get_logger
|
||||
from ...hands import Node
|
||||
from ... import serializers
|
||||
from .mixin import UserAssetPermissionMixin, UserAssetTreeMixin
|
||||
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
__all__ = [
|
||||
'UserGrantedAssetsApi',
|
||||
'UserGrantedAssetsAsTreeApi',
|
||||
'UserGrantedNodeAssetsApi',
|
||||
]
|
||||
|
||||
|
||||
class UserGrantedAssetsApi(UserAssetPermissionMixin, ListAPIView):
|
||||
permission_classes = (IsOrgAdminOrAppUser,)
|
||||
serializer_class = serializers.AssetGrantedSerializer
|
||||
only_fields = serializers.AssetGrantedSerializer.Meta.only_fields
|
||||
filter_fields = ['hostname', 'ip', 'id', 'comment']
|
||||
search_fields = ['hostname', 'ip', 'comment']
|
||||
|
||||
def filter_by_nodes(self, queryset):
|
||||
node_id = self.request.query_params.get("node")
|
||||
if not node_id:
|
||||
return queryset
|
||||
node = get_object_or_404(Node, pk=node_id)
|
||||
query_all = self.request.query_params.get("all", "0") in ["1", "true"]
|
||||
if query_all:
|
||||
pattern = '^{0}$|^{0}:'.format(node.key)
|
||||
queryset = queryset.filter(nodes__key__regex=pattern).distinct()
|
||||
else:
|
||||
queryset = queryset.filter(nodes=node)
|
||||
return queryset
|
||||
|
||||
def filter_queryset(self, queryset):
|
||||
queryset = super().filter_queryset(queryset)
|
||||
queryset = self.filter_by_nodes(queryset)
|
||||
return queryset
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = self.util.get_assets().only(*self.only_fields)
|
||||
return queryset
|
||||
|
||||
|
||||
class UserGrantedAssetsAsTreeApi(UserAssetTreeMixin, UserGrantedAssetsApi):
|
||||
pass
|
||||
|
||||
|
||||
class UserGrantedNodeAssetsApi(UserGrantedAssetsApi):
|
||||
def get_queryset(self):
|
||||
node_id = self.kwargs.get("node_id")
|
||||
node = get_object_or_404(Node, pk=node_id)
|
||||
deep = self.request.query_params.get("all", "0") == "1"
|
||||
queryset = self.util.get_nodes_assets(node, deep=deep)\
|
||||
.only(*self.only_fields)
|
||||
return queryset
|
Reference in New Issue
Block a user