refactor(perms): 修改授权规则的目录结构(asset、application)

pull/4886/head
Bai 2020-10-22 18:13:14 +08:00 committed by 老广
parent 1d550cbe64
commit fdded8b90f
37 changed files with 134 additions and 110 deletions

View File

@ -22,7 +22,7 @@ class FavoriteAsset(CommonModelMixin):
@classmethod @classmethod
def get_user_favorite_assets(cls, user): def get_user_favorite_assets(cls, user):
from assets.models import Asset from assets.models import Asset
from perms.utils.user_asset_permission import get_user_granted_all_assets from perms.utils.asset.user_permission import get_user_granted_all_assets
asset_ids = get_user_granted_all_assets(user).values_list('id', flat=True) asset_ids = get_user_granted_all_assets(user).values_list('id', flat=True)
query_name = cls.asset.field.related_query_name() query_name = cls.asset.field.related_query_name()
return Asset.org_objects.filter(**{f'{query_name}__user_id': user.id}, id__in=asset_ids).distinct() return Asset.org_objects.filter(**{f'{query_name}__user_id': user.id}, id__in=asset_ids).distinct()

View File

@ -1,14 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
from .asset_permission import * from .asset import *
from .application_permission import * from .application import *
from .user_permission import *
from .user_permission_application import * # TODO: 删除
from .asset_permission_relation import *
from .application_permission_relation import *
from .user_group_permission import *
from .user_group_permission_application import *
from .remote_app_permission import * from .remote_app_permission import *
from .remote_app_permission_relation import * from .remote_app_permission_relation import *
from .user_remote_app_permission import * from .user_remote_app_permission import *

View File

@ -0,0 +1,4 @@
from .user_permission import *
from .application_permission import *
from .application_permission_relation import *
from .user_group_permission_application import *

View File

@ -2,8 +2,8 @@
# #
from common.permissions import IsOrgAdmin from common.permissions import IsOrgAdmin
from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins.api import OrgBulkModelViewSet
from ..models import ApplicationPermission from perms.models import ApplicationPermission
from .. import serializers from perms import serializers
class ApplicationPermissionViewSet(OrgBulkModelViewSet): class ApplicationPermissionViewSet(OrgBulkModelViewSet):

View File

@ -10,8 +10,8 @@ from orgs.mixins.api import OrgRelationMixin
from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins.api import OrgBulkModelViewSet
from orgs.utils import current_org from orgs.utils import current_org
from common.permissions import IsOrgAdmin from common.permissions import IsOrgAdmin
from .. import serializers from perms import serializers
from .. import models from perms import models
__all__ = [ __all__ = [
'ApplicationPermissionUserRelationViewSet', 'ApplicationPermissionUserRelationViewSet',

View File

@ -8,13 +8,13 @@ from rest_framework.generics import (
) )
from applications.models import Application from applications.models import Application
from perms.utils.application_permission import ( from perms.utils.application.permission import (
get_application_system_users_id get_application_system_users_id
) )
from perms.api.user_permission.mixin import ForAdminMixin, ForUserMixin from perms.api.asset.user_permission.mixin import ForAdminMixin, ForUserMixin
from common.permissions import IsOrgAdminOrAppUser from common.permissions import IsOrgAdminOrAppUser
from ...hands import User, SystemUser from perms.hands import User, SystemUser
from ... import serializers from perms import serializers
__all__ = [ __all__ = [

View File

@ -5,8 +5,8 @@ from rest_framework.response import Response
from applications.api.mixin import SerializeApplicationToTreeNodeMixin from applications.api.mixin import SerializeApplicationToTreeNodeMixin
from perms import serializers from perms import serializers
from perms.api.user_permission.mixin import ForAdminMixin, ForUserMixin from perms.api.asset.user_permission.mixin import ForAdminMixin, ForUserMixin
from perms.utils.user_application_permission import ( from perms.utils.application.user_permission import (
get_user_granted_all_applications get_user_granted_all_applications
) )

View File

@ -0,0 +1,4 @@
from .user_permission import *
from .asset_permission import *
from .asset_permission_relation import *
from .user_group_permission import *

View File

@ -5,11 +5,11 @@ from django.db.models import Q
from common.permissions import IsOrgAdmin from common.permissions import IsOrgAdmin
from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins.api import OrgBulkModelViewSet
from common.utils import get_object_or_none from common.utils import get_object_or_none
from ..models import AssetPermission from perms.models import AssetPermission
from ..hands import ( from perms.hands import (
User, UserGroup, Asset, Node, SystemUser, User, UserGroup, Asset, Node, SystemUser,
) )
from .. import serializers from perms import serializers
__all__ = [ __all__ = [

View File

@ -11,8 +11,8 @@ from orgs.mixins.api import OrgRelationMixin
from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins.api import OrgBulkModelViewSet
from orgs.utils import current_org from orgs.utils import current_org
from common.permissions import IsOrgAdmin from common.permissions import IsOrgAdmin
from .. import serializers from perms import serializers
from .. import models from perms import models
__all__ = [ __all__ = [
'AssetPermissionUserRelationViewSet', 'AssetPermissionUserGroupRelationViewSet', 'AssetPermissionUserRelationViewSet', 'AssetPermissionUserGroupRelationViewSet',

View File

@ -10,9 +10,9 @@ from common.permissions import IsOrgAdminOrAppUser
from common.utils import lazyproperty from common.utils import lazyproperty
from perms.models import AssetPermission from perms.models import AssetPermission
from assets.models import Asset, Node from assets.models import Asset, Node
from . import user_permission as uapi from perms.api.asset import user_permission as uapi
from perms import serializers from perms import serializers
from perms.utils.asset_permission import get_asset_system_users_id_with_actions_by_group from perms.utils.asset.permission import get_asset_system_users_id_with_actions_by_group
from assets.api.mixin import SerializeToTreeNodeMixin from assets.api.mixin import SerializeToTreeNodeMixin
from users.models import UserGroup from users.models import UserGroup

View File

@ -10,13 +10,13 @@ from rest_framework.generics import (
) )
from orgs.utils import tmp_to_root_org from orgs.utils import tmp_to_root_org
from perms.utils.asset_permission import get_asset_system_users_id_with_actions_by_user from perms.utils.asset.permission import get_asset_system_users_id_with_actions_by_user
from common.permissions import IsOrgAdminOrAppUser, IsOrgAdmin, IsValidUser from common.permissions import IsOrgAdminOrAppUser, IsOrgAdmin, IsValidUser
from common.utils import get_logger, lazyproperty from common.utils import get_logger, lazyproperty
from ...hands import User, Asset, SystemUser from perms.hands import User, Asset, SystemUser
from ... import serializers from perms import serializers
from ...models import Action from perms.models import Action
logger = get_logger(__name__) logger = get_logger(__name__)

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
from perms.api.user_permission.mixin import UserNodeGrantStatusDispatchMixin from perms.api.asset.user_permission.mixin import UserNodeGrantStatusDispatchMixin
from rest_framework.generics import ListAPIView from rest_framework.generics import ListAPIView
from rest_framework.response import Response from rest_framework.response import Response
from django.conf import settings from django.conf import settings
@ -9,8 +9,8 @@ from assets.api.mixin import SerializeToTreeNodeMixin
from common.utils import get_logger from common.utils import get_logger
from perms.pagination import GrantedAssetLimitOffsetPagination from perms.pagination import GrantedAssetLimitOffsetPagination
from assets.models import Asset, Node, FavoriteAsset from assets.models import Asset, Node, FavoriteAsset
from ... import serializers from perms import serializers
from ...utils.user_asset_permission import ( from perms.utils.asset.user_permission import (
get_node_all_granted_assets, get_user_direct_granted_assets, get_node_all_granted_assets, get_user_direct_granted_assets,
get_user_granted_all_assets get_user_granted_all_assets
) )

View File

@ -10,9 +10,9 @@ from rest_framework.request import Request
from assets.api.mixin import SerializeToTreeNodeMixin from assets.api.mixin import SerializeToTreeNodeMixin
from common.utils import get_logger from common.utils import get_logger
from .mixin import ForAdminMixin, ForUserMixin, UserNodeGrantStatusDispatchMixin from .mixin import ForAdminMixin, ForUserMixin, UserNodeGrantStatusDispatchMixin
from ...hands import Node, User from perms.hands import Node, User
from ... import serializers from perms import serializers
from ...utils.user_asset_permission import ( from perms.utils.asset.user_permission import (
get_indirect_granted_node_children, get_indirect_granted_node_children,
get_user_granted_nodes_list_via_mapping_node, get_user_granted_nodes_list_via_mapping_node,
get_top_level_granted_nodes, get_top_level_granted_nodes,

View File

@ -8,8 +8,7 @@ from django.db.models import F
from common.permissions import IsValidUser from common.permissions import IsValidUser
from common.utils import get_logger, get_object_or_none from common.utils import get_logger, get_object_or_none
from .mixin import UserNodeGrantStatusDispatchMixin, ForUserMixin, ForAdminMixin from .mixin import UserNodeGrantStatusDispatchMixin, ForUserMixin, ForAdminMixin
from ...utils.user_asset_permission import ( from perms.utils.asset.user_permission import (
get_user_resources_q_granted_by_permissions,
get_indirect_granted_node_children, UNGROUPED_NODE_KEY, FAVORITE_NODE_KEY, get_indirect_granted_node_children, UNGROUPED_NODE_KEY, FAVORITE_NODE_KEY,
get_user_direct_granted_assets, get_top_level_granted_nodes, get_user_direct_granted_assets, get_top_level_granted_nodes,
get_user_granted_nodes_list_via_mapping_node, get_user_granted_nodes_list_via_mapping_node,
@ -19,7 +18,7 @@ from ...utils.user_asset_permission import (
from assets.models import Asset, FavoriteAsset from assets.models import Asset, FavoriteAsset
from assets.api import SerializeToTreeNodeMixin from assets.api import SerializeToTreeNodeMixin
from ...hands import Node from perms.hands import Node
logger = get_logger(__name__) logger = get_logger(__name__)

View File

@ -1,13 +1,12 @@
# coding: utf-8 # coding: utf-8
# #
from .asset import *
from .application import *
from .system_user_permission import * from .system_user_permission import *
from .asset_permission import *
from .application_permission import * # TODO: 删除
from .user_permission import *
from .remote_app_permission import * from .remote_app_permission import *
from .remote_app_permission_relation import * from .remote_app_permission_relation import *
from .asset_permission_relation import *
from .application_permission_relation import *
from .database_app_permission import * from .database_app_permission import *
from .database_app_permission_relation import * from .database_app_permission_relation import *
from .base import * from .base import *

View File

@ -0,0 +1,3 @@
from .permission import *
from .permission_relation import *
from .user_permission import *

View File

@ -4,7 +4,7 @@ from rest_framework import serializers
from common.mixins import BulkSerializerMixin from common.mixins import BulkSerializerMixin
from common.serializers import AdaptedBulkListSerializer from common.serializers import AdaptedBulkListSerializer
from ..models import ApplicationPermission from perms.models import ApplicationPermission
__all__ = [ __all__ = [
'ApplicationPermissionUserRelationSerializer', 'ApplicationPermissionUserRelationSerializer',

View File

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
#
from rest_framework import serializers
from assets.models import SystemUser
from applications.models import Application
__all__ = [
'ApplicationGrantedSerializer',
'ApplicationSystemUserSerializer'
]
class ApplicationSystemUserSerializer(serializers.ModelSerializer):
"""
查看授权的应用系统用户的数据结构这个和SystemUserSerializer不同字段少
"""
class Meta:
model = SystemUser
only_fields = (
'id', 'name', 'username', 'priority', 'protocol', 'login_mode'
)
fields = list(only_fields)
read_only_fields = fields
class ApplicationGrantedSerializer(serializers.ModelSerializer):
"""
被授权应用的数据结构
"""
class Meta:
model = Application
only_fields = [
'id', 'name', 'domain', 'category', 'type', 'comment', 'org_id'
]
fields = only_fields + ['org_name']
read_only_fields = fields

View File

@ -0,0 +1,3 @@
from .permission import *
from .permission_relation import *
from .user_permission import *

View File

@ -5,7 +5,7 @@ from rest_framework import serializers
from common.mixins import BulkSerializerMixin from common.mixins import BulkSerializerMixin
from common.serializers import AdaptedBulkListSerializer from common.serializers import AdaptedBulkListSerializer
from assets.models import Asset, Node from assets.models import Asset, Node
from ..models import AssetPermission from perms.models import AssetPermission
from users.models import User from users.models import User
__all__ = [ __all__ = [

View File

@ -6,8 +6,7 @@ from django.utils.translation import ugettext_lazy as _
from assets.models import Node, SystemUser, Asset from assets.models import Node, SystemUser, Asset
from assets.serializers import ProtocolsField from assets.serializers import ProtocolsField
from .asset_permission import ActionsField from perms.serializers.asset.permission import ActionsField
from applications.models import Application
__all__ = [ __all__ = [
'NodeGrantedSerializer', 'NodeGrantedSerializer',
@ -16,8 +15,6 @@ __all__ = [
'RemoteAppSystemUserSerializer', 'RemoteAppSystemUserSerializer',
'DatabaseAppSystemUserSerializer', 'DatabaseAppSystemUserSerializer',
'K8sAppSystemUserSerializer', 'K8sAppSystemUserSerializer',
'ApplicationGrantedSerializer',
'ApplicationSystemUserSerializer'
] ]
@ -37,49 +34,6 @@ class AssetSystemUserSerializer(serializers.ModelSerializer):
read_only_fields = fields read_only_fields = fields
class ApplicationSystemUserSerializer(serializers.ModelSerializer):
"""
查看授权的应用系统用户的数据结构这个和SystemUserSerializer不同字段少
"""
class Meta:
model = SystemUser
only_fields = (
'id', 'name', 'username', 'priority', 'protocol', 'login_mode'
)
fields = list(only_fields)
read_only_fields = fields
class RemoteAppSystemUserSerializer(serializers.ModelSerializer):
class Meta:
model = SystemUser
only_fields = (
'id', 'name', 'username', 'priority', 'protocol', 'login_mode',
)
fields = list(only_fields)
read_only_fields = fields
class DatabaseAppSystemUserSerializer(serializers.ModelSerializer):
class Meta:
model = SystemUser
only_fields = (
'id', 'name', 'username', 'priority', 'protocol', 'login_mode',
)
fields = list(only_fields)
read_only_fields = fields
class K8sAppSystemUserSerializer(serializers.ModelSerializer):
class Meta:
model = SystemUser
only_fields = (
'id', 'name', 'username', 'priority', 'protocol', 'login_mode',
)
fields = list(only_fields)
read_only_fields = fields
class AssetGrantedSerializer(serializers.ModelSerializer): class AssetGrantedSerializer(serializers.ModelSerializer):
""" """
被授权资产的数据结构 被授权资产的数据结构
@ -110,14 +64,33 @@ class ActionsSerializer(serializers.Serializer):
actions = ActionsField(read_only=True) actions = ActionsField(read_only=True)
class ApplicationGrantedSerializer(serializers.ModelSerializer): # TODO: 删除
""" class RemoteAppSystemUserSerializer(serializers.ModelSerializer):
被授权应用的数据结构
"""
class Meta: class Meta:
model = Application model = SystemUser
only_fields = [ only_fields = (
'id', 'name', 'domain', 'category', 'type', 'comment', 'org_id' 'id', 'name', 'username', 'priority', 'protocol', 'login_mode',
] )
fields = only_fields + ['org_name'] fields = list(only_fields)
read_only_fields = fields read_only_fields = fields
class DatabaseAppSystemUserSerializer(serializers.ModelSerializer):
class Meta:
model = SystemUser
only_fields = (
'id', 'name', 'username', 'priority', 'protocol', 'login_mode',
)
fields = list(only_fields)
read_only_fields = fields
class K8sAppSystemUserSerializer(serializers.ModelSerializer):
class Meta:
model = SystemUser
only_fields = (
'id', 'name', 'username', 'priority', 'protocol', 'login_mode',
)
fields = list(only_fields)
read_only_fields = fields

View File

@ -11,7 +11,7 @@ from common.utils.timezone import now, dt_formater, dt_parser
from users.models import User from users.models import User
from assets.models import Node from assets.models import Node
from perms.models import RebuildUserTreeTask, AssetPermission from perms.models import RebuildUserTreeTask, AssetPermission
from perms.utils.user_asset_permission import rebuild_user_mapping_nodes_if_need_with_lock, lock from perms.utils.asset.user_permission import rebuild_user_mapping_nodes_if_need_with_lock, lock
logger = get_logger(__file__) logger = get_logger(__file__)

View File

@ -4,6 +4,7 @@ from django.urls import re_path
from common import api as capi from common import api as capi
from .asset_permission import asset_permission_urlpatterns from .asset_permission import asset_permission_urlpatterns
from .application_permission import application_permission_urlpatterns from .application_permission import application_permission_urlpatterns
from .remote_app_permission import remote_app_permission_urlpatterns from .remote_app_permission import remote_app_permission_urlpatterns
from .database_app_permission import database_app_permission_urlpatterns from .database_app_permission import database_app_permission_urlpatterns
from .system_user_permission import system_users_permission_urlpatterns from .system_user_permission import system_users_permission_urlpatterns

View File

@ -1,10 +1,10 @@
# coding: utf-8 # coding: utf-8
# #
from .asset_permission import * from .asset import *
from .application_permission import * from .application import *
# TODO: 删除
from .remote_app_permission import * from .remote_app_permission import *
from .database_app_permission import * from .database_app_permission import *
from .k8s_app_permission import * from .k8s_app_permission import *
from .user_asset_permission import *
from .user_application_permission import *

View File

@ -0,0 +1,2 @@
from .permission import *
from .user_permission import *

View File

@ -1,7 +1,7 @@
from django.db.models import Q from django.db.models import Q
from common.utils import get_logger from common.utils import get_logger
from ..models import ApplicationPermission from perms.models import ApplicationPermission
logger = get_logger(__file__) logger = get_logger(__file__)

View File

@ -0,0 +1,2 @@
from .permission import *
from .user_permission import *

View File

@ -3,8 +3,8 @@ from collections import defaultdict
from django.db.models import Q from django.db.models import Q
from common.utils import get_logger from common.utils import get_logger
from ..models import AssetPermission from perms.models import AssetPermission
from ..hands import Asset, User, UserGroup from perms.hands import Asset, User, UserGroup
from perms.models.base import BasePermissionQuerySet from perms.models.base import BasePermissionQuerySet
logger = get_logger(__file__) logger = get_logger(__file__)