mirror of https://github.com/jumpserver/jumpserver
Merge branch 'v3' of github.com:jumpserver/jumpserver into v3
commit
c1ad072736
|
@ -27,7 +27,6 @@ class RoleAdminMixin:
|
||||||
user_id = self.kwargs.get(self.user_id_url_kwarg)
|
user_id = self.kwargs.get(self.user_id_url_kwarg)
|
||||||
if hasattr(self, 'swagger_fake_view') and not user_id:
|
if hasattr(self, 'swagger_fake_view') and not user_id:
|
||||||
return self.request.user # NOQA
|
return self.request.user # NOQA
|
||||||
|
|
||||||
user_model = get_user_model()
|
user_model = get_user_model()
|
||||||
return user_model.objects.get(id=user_id)
|
return user_model.objects.get(id=user_id)
|
||||||
|
|
||||||
|
@ -37,4 +36,4 @@ class RoleUserMixin:
|
||||||
|
|
||||||
@lazyproperty
|
@lazyproperty
|
||||||
def user(self):
|
def user(self):
|
||||||
return self.request.user
|
return self.request.user
|
||||||
|
|
|
@ -9,54 +9,52 @@ from .mixin import (
|
||||||
)
|
)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'UserDirectGrantedAssetsForAdminApi', 'MyDirectGrantedAssetsApi', 'UserFavoriteGrantedAssetsForAdminApi',
|
'UserDirectGrantedAssetsApi', 'MyDirectGrantedAssetsApi',
|
||||||
'MyFavoriteGrantedAssetsApi', 'UserDirectGrantedAssetsAsTreeForAdminApi', 'MyUngroupAssetsAsTreeApi',
|
'UserFavoriteGrantedAssetsApi',
|
||||||
'UserAllGrantedAssetsApi', 'MyAllGrantedAssetsApi', 'MyAllAssetsAsTreeApi', 'UserGrantedNodeAssetsForAdminApi',
|
'MyFavoriteGrantedAssetsApi', 'UserDirectGrantedAssetsAsTreeApi',
|
||||||
|
'MyUngroupAssetsAsTreeApi',
|
||||||
|
'UserAllGrantedAssetsApi', 'MyAllGrantedAssetsApi', 'MyAllAssetsAsTreeApi',
|
||||||
|
'UserGrantedNodeAssetsApi',
|
||||||
'MyGrantedNodeAssetsApi',
|
'MyGrantedNodeAssetsApi',
|
||||||
]
|
]
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class UserDirectGrantedAssetsForAdminApi(UserDirectGrantedAssetsQuerysetMixin,
|
class UserDirectGrantedAssetsApi(
|
||||||
AssetRoleAdminMixin,
|
AssetRoleAdminMixin,
|
||||||
AssetsSerializerFormatMixin,
|
UserDirectGrantedAssetsQuerysetMixin, AssetsSerializerFormatMixin, ListAPIView
|
||||||
ListAPIView):
|
):
|
||||||
|
""" 直接授权给用户的资产 """
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MyDirectGrantedAssetsApi(UserDirectGrantedAssetsQuerysetMixin,
|
class MyDirectGrantedAssetsApi(AssetRoleUserMixin, UserDirectGrantedAssetsApi):
|
||||||
AssetRoleUserMixin,
|
""" 直接授权给我的资产 """
|
||||||
AssetsSerializerFormatMixin,
|
|
||||||
ListAPIView):
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UserFavoriteGrantedAssetsForAdminApi(UserFavoriteGrantedAssetsMixin,
|
class UserFavoriteGrantedAssetsApi(
|
||||||
AssetRoleAdminMixin,
|
AssetRoleAdminMixin,
|
||||||
AssetsSerializerFormatMixin,
|
UserFavoriteGrantedAssetsMixin, AssetsSerializerFormatMixin, ListAPIView
|
||||||
ListAPIView):
|
):
|
||||||
|
""" 用户收藏的授权资产 """
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MyFavoriteGrantedAssetsApi(UserFavoriteGrantedAssetsMixin,
|
class MyFavoriteGrantedAssetsApi(AssetRoleUserMixin, UserFavoriteGrantedAssetsApi):
|
||||||
AssetRoleUserMixin,
|
""" 我收藏的授权资产 """
|
||||||
AssetsSerializerFormatMixin,
|
|
||||||
ListAPIView):
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UserDirectGrantedAssetsAsTreeForAdminApi(UserDirectGrantedAssetsQuerysetMixin,
|
class UserDirectGrantedAssetsAsTreeApi(AssetsTreeFormatMixin, UserDirectGrantedAssetsApi):
|
||||||
AssetRoleAdminMixin,
|
""" 用户直接授权的资产作为树 """
|
||||||
AssetsTreeFormatMixin,
|
|
||||||
ListAPIView):
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MyUngroupAssetsAsTreeApi(UserDirectGrantedAssetsQuerysetMixin,
|
class MyUngroupAssetsAsTreeApi(AssetRoleUserMixin, UserDirectGrantedAssetsAsTreeApi):
|
||||||
AssetRoleUserMixin,
|
""" 我的未分组节点下的资产作为树 """
|
||||||
AssetsTreeFormatMixin,
|
|
||||||
ListAPIView):
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
queryset = super().get_queryset()
|
queryset = super().get_queryset()
|
||||||
if not settings.PERM_SINGLE_ASSET_TO_UNGROUP_NODE:
|
if not settings.PERM_SINGLE_ASSET_TO_UNGROUP_NODE:
|
||||||
|
@ -64,36 +62,31 @@ class MyUngroupAssetsAsTreeApi(UserDirectGrantedAssetsQuerysetMixin,
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class UserAllGrantedAssetsApi(UserAllGrantedAssetsQuerysetMixin,
|
class UserAllGrantedAssetsApi(
|
||||||
AssetRoleAdminMixin,
|
AssetRoleAdminMixin,
|
||||||
AssetsSerializerFormatMixin,
|
UserAllGrantedAssetsQuerysetMixin, AssetsSerializerFormatMixin, ListAPIView
|
||||||
ListAPIView):
|
):
|
||||||
|
""" 授权给用户的所有资产 """
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MyAllGrantedAssetsApi(UserAllGrantedAssetsQuerysetMixin,
|
class MyAllGrantedAssetsApi(AssetRoleUserMixin, UserAllGrantedAssetsApi):
|
||||||
AssetRoleUserMixin,
|
""" 授权给我的所有资产 """
|
||||||
AssetsSerializerFormatMixin,
|
|
||||||
ListAPIView):
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MyAllAssetsAsTreeApi(UserAllGrantedAssetsQuerysetMixin,
|
class MyAllAssetsAsTreeApi(AssetsTreeFormatMixin, MyAllGrantedAssetsApi):
|
||||||
AssetRoleUserMixin,
|
""" 授权给我的所有资产作为树 """
|
||||||
AssetsTreeFormatMixin,
|
|
||||||
ListAPIView):
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UserGrantedNodeAssetsForAdminApi(AssetRoleAdminMixin,
|
class UserGrantedNodeAssetsApi(
|
||||||
UserGrantedNodeAssetsMixin,
|
AssetRoleAdminMixin, UserGrantedNodeAssetsMixin, AssetsSerializerFormatMixin, ListAPIView
|
||||||
AssetsSerializerFormatMixin,
|
):
|
||||||
ListAPIView):
|
""" 授权给用户的节点资产 """
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MyGrantedNodeAssetsApi(AssetRoleUserMixin,
|
class MyGrantedNodeAssetsApi(AssetRoleUserMixin, UserGrantedNodeAssetsApi):
|
||||||
UserGrantedNodeAssetsMixin,
|
""" 授权给我的节点资产 """
|
||||||
AssetsSerializerFormatMixin,
|
|
||||||
ListAPIView):
|
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -64,6 +64,7 @@ class UserGrantedNodeAssetsMixin:
|
||||||
pagination_class = NodeGrantedAssetPagination
|
pagination_class = NodeGrantedAssetPagination
|
||||||
pagination_node: Node
|
pagination_node: Node
|
||||||
user: User
|
user: User
|
||||||
|
kwargs: dict
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
if getattr(self, 'swagger_fake_view', False):
|
if getattr(self, 'swagger_fake_view', False):
|
||||||
|
@ -91,6 +92,9 @@ class AssetsTreeFormatMixin(SerializeToTreeNodeMixin):
|
||||||
"""
|
"""
|
||||||
将 资产 序列化成树的结构返回
|
将 资产 序列化成树的结构返回
|
||||||
"""
|
"""
|
||||||
|
filter_queryset: callable
|
||||||
|
get_queryset: callable
|
||||||
|
|
||||||
filterset_fields = ['name', 'ip', 'id', 'comment']
|
filterset_fields = ['name', 'ip', 'id', 'comment']
|
||||||
search_fields = ['name', 'ip', 'comment']
|
search_fields = ['name', 'ip', 'comment']
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
||||||
from common.http import is_true
|
from common.http import is_true
|
||||||
from common.mixins.api import RoleAdminMixin as _RoleAdminMixin
|
from common.mixins.api import RoleAdminMixin
|
||||||
from common.mixins.api import RoleUserMixin as _RoleUserMixin
|
from common.mixins.api import RoleUserMixin
|
||||||
from orgs.utils import tmp_to_root_org
|
from orgs.utils import tmp_to_root_org
|
||||||
from users.models import User
|
from users.models import User
|
||||||
from perms.utils.user_permission import UserGrantedTreeRefreshController
|
from perms.utils.user_permission import UserGrantedTreeRefreshController
|
||||||
|
|
||||||
|
|
||||||
class PermBaseMixin:
|
class RebuildTreeMixin:
|
||||||
user: User
|
user: User
|
||||||
|
|
||||||
def get(self, request: Request, *args, **kwargs):
|
def get(self, request: Request, *args, **kwargs):
|
||||||
|
@ -20,7 +20,7 @@ class PermBaseMixin:
|
||||||
return super().get(request, *args, **kwargs)
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class AssetRoleAdminMixin(PermBaseMixin, _RoleAdminMixin):
|
class AssetRoleAdminMixin(RebuildTreeMixin, RoleAdminMixin):
|
||||||
rbac_perms = (
|
rbac_perms = (
|
||||||
('list', 'perms.view_userassets'),
|
('list', 'perms.view_userassets'),
|
||||||
('retrieve', 'perms.view_userassets'),
|
('retrieve', 'perms.view_userassets'),
|
||||||
|
@ -29,7 +29,7 @@ class AssetRoleAdminMixin(PermBaseMixin, _RoleAdminMixin):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class AssetRoleUserMixin(PermBaseMixin, _RoleUserMixin):
|
class AssetRoleUserMixin(RebuildTreeMixin, RoleUserMixin):
|
||||||
rbac_perms = (
|
rbac_perms = (
|
||||||
('list', 'perms.view_myassets'),
|
('list', 'perms.view_myassets'),
|
||||||
('retrieve', 'perms.view_myassets'),
|
('retrieve', 'perms.view_myassets'),
|
||||||
|
|
|
@ -24,7 +24,7 @@ user_permission_urlpatterns = [
|
||||||
path('assets/', api.MyAllGrantedAssetsApi.as_view(), name='my-assets'),
|
path('assets/', api.MyAllGrantedAssetsApi.as_view(), name='my-assets'),
|
||||||
|
|
||||||
# Tree Node 的数据格式返回
|
# Tree Node 的数据格式返回
|
||||||
path('<uuid:pk>/assets/tree/', api.UserDirectGrantedAssetsAsTreeForAdminApi.as_view(), name='user-assets-as-tree'),
|
path('<uuid:pk>/assets/tree/', api.UserDirectGrantedAssetsAsTreeApi.as_view(), name='user-assets-as-tree'),
|
||||||
path('assets/tree/', api.MyAllAssetsAsTreeApi.as_view(), name='my-assets-as-tree'),
|
path('assets/tree/', api.MyAllAssetsAsTreeApi.as_view(), name='my-assets-as-tree'),
|
||||||
path('ungroup/assets/tree/', api.MyUngroupAssetsAsTreeApi.as_view(), name='my-ungroup-assets-as-tree'),
|
path('ungroup/assets/tree/', api.MyUngroupAssetsAsTreeApi.as_view(), name='my-ungroup-assets-as-tree'),
|
||||||
# ^--------------------------------------------------------^
|
# ^--------------------------------------------------------^
|
||||||
|
@ -60,17 +60,18 @@ user_permission_urlpatterns = [
|
||||||
path('nodes/children-with-assets/tree/', api.MyGrantedNodeChildrenWithAssetsAsTreeApi.as_view(), name='my-nodes-children-with-assets-as-tree'),
|
path('nodes/children-with-assets/tree/', api.MyGrantedNodeChildrenWithAssetsAsTreeApi.as_view(), name='my-nodes-children-with-assets-as-tree'),
|
||||||
|
|
||||||
# 查询授权树上某个节点的所有资产
|
# 查询授权树上某个节点的所有资产
|
||||||
path('<uuid:pk>/nodes/<uuid:node_id>/assets/', api.UserGrantedNodeAssetsForAdminApi.as_view(), name='user-node-assets'),
|
path('<uuid:pk>/nodes/<uuid:node_id>/assets/', api.UserGrantedNodeAssetsApi.as_view(), name='user-node-assets'),
|
||||||
path('nodes/<uuid:node_id>/assets/', api.MyGrantedNodeAssetsApi.as_view(), name='my-node-assets'),
|
path('nodes/<uuid:node_id>/assets/', api.MyGrantedNodeAssetsApi.as_view(), name='my-node-assets'),
|
||||||
|
|
||||||
# 未分组的资产
|
# 未分组的资产
|
||||||
path('<uuid:pk>/nodes/ungrouped/assets/', api.UserDirectGrantedAssetsForAdminApi.as_view(), name='user-ungrouped-assets'),
|
path('<uuid:pk>/nodes/ungrouped/assets/', api.UserDirectGrantedAssetsApi.as_view(), name='user-ungrouped-assets'),
|
||||||
path('nodes/ungrouped/assets/', api.MyDirectGrantedAssetsApi.as_view(), name='my-ungrouped-assets'),
|
path('nodes/ungrouped/assets/', api.MyDirectGrantedAssetsApi.as_view(), name='my-ungrouped-assets'),
|
||||||
|
|
||||||
# 收藏的资产
|
# 收藏的资产
|
||||||
path('<uuid:pk>/nodes/favorite/assets/', api.UserFavoriteGrantedAssetsForAdminApi.as_view(), name='user-ungrouped-assets'),
|
path('<uuid:pk>/nodes/favorite/assets/', api.UserFavoriteGrantedAssetsApi.as_view(), name='user-ungrouped-assets'),
|
||||||
path('nodes/favorite/assets/', api.MyFavoriteGrantedAssetsApi.as_view(), name='my-ungrouped-assets'),
|
path('nodes/favorite/assets/', api.MyFavoriteGrantedAssetsApi.as_view(), name='my-ungrouped-assets'),
|
||||||
|
|
||||||
|
# Todo: 删除
|
||||||
# Asset System users
|
# Asset System users
|
||||||
path('<uuid:pk>/assets/<uuid:asset_id>/system-users/', api.UserGrantedAssetSystemUsersForAdminApi.as_view(), name='user-asset-system-users'),
|
path('<uuid:pk>/assets/<uuid:asset_id>/system-users/', api.UserGrantedAssetSystemUsersForAdminApi.as_view(), name='user-asset-system-users'),
|
||||||
path('assets/<uuid:asset_id>/system-users/', api.MyGrantedAssetSystemUsersApi.as_view(), name='my-asset-system-users'),
|
path('assets/<uuid:asset_id>/system-users/', api.MyGrantedAssetSystemUsersApi.as_view(), name='my-asset-system-users'),
|
||||||
|
|
Loading…
Reference in New Issue