From 5e3316c7c82c2c68211f9dca31faeb63302101fd Mon Sep 17 00:00:00 2001 From: hanshuaikang <1758504262@qq.com> Date: Fri, 14 Jul 2023 12:11:41 +0800 Subject: [PATCH] =?UTF-8?q?bugfix:=20=E8=A6=86=E7=9B=96IamPermission?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=EF=BC=8C=E4=BF=AE=E5=A4=8D=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=8C=85=E6=9B=B4=E6=96=B0=E6=97=A0=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/apis/drf/viewsets/package_source.py | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/gcloud/core/apis/drf/viewsets/package_source.py b/gcloud/core/apis/drf/viewsets/package_source.py index 6a6b1b3e19..dbaf74ced0 100644 --- a/gcloud/core/apis/drf/viewsets/package_source.py +++ b/gcloud/core/apis/drf/viewsets/package_source.py @@ -11,26 +11,23 @@ specific language governing permissions and limitations under the License. """ import logging +from itertools import chain + import jsonschema import ujson as json -from itertools import chain from django.db import transaction - -from rest_framework import status - -from rest_framework import permissions -from rest_framework.response import Response +from rest_framework import permissions, status from rest_framework.exceptions import NotAcceptable -from rest_framework.generics import UpdateAPIView, ListCreateAPIView, DestroyAPIView +from rest_framework.generics import DestroyAPIView, ListCreateAPIView, UpdateAPIView +from rest_framework.response import Response -from gcloud.iam_auth import IAMMeta +from gcloud.core.apis.drf.permission import IamPermission, IamPermissionInfo +from gcloud.core.apis.drf.serilaziers import PackageSourceSerializer +from gcloud.core.apis.drf.viewsets.base import GcloudCommonMixin from gcloud.external_plugins import exceptions -from gcloud.external_plugins.models import source_cls_factory, CachePackageSource +from gcloud.external_plugins.models import CachePackageSource, source_cls_factory from gcloud.external_plugins.schemas import ADD_SOURCE_SCHEMA, UPDATE_SOURCE_SCHEMA - -from gcloud.core.apis.drf.viewsets.base import GcloudCommonMixin -from gcloud.core.apis.drf.permission import IamPermissionInfo, IamPermission -from gcloud.core.apis.drf.serilaziers import PackageSourceSerializer +from gcloud.iam_auth import IAMMeta logger = logging.getLogger("root") @@ -43,6 +40,17 @@ class PackageSourcePermission(IamPermission): "destroy": IamPermissionInfo(IAMMeta.ADMIN_EDIT_ACTION), } + def check_permission(self, request, view, resource_param=None, check_hook=None): + + permission_info = self.actions.get(view.action, IamPermissionInfo(IAMMeta.ADMIN_EDIT_ACTION)) + + # 不匹配权限不做校验 + if permission_info.check_hook != check_hook: + return True + + self.iam_auth_check(request, action=permission_info.iam_action, resources=[]) + return True + def get_source_models(): origin_models = list(source_cls_factory.values())