mirror of https://github.com/jumpserver/jumpserver
perf(permission): 优化权限控制,显式的声明权限
parent
542eb25e7b
commit
93474766f6
|
@ -2,13 +2,11 @@ from typing import List
|
||||||
|
|
||||||
from assets.models import Node, Asset
|
from assets.models import Node, Asset
|
||||||
from assets.pagination import AssetLimitOffsetPagination
|
from assets.pagination import AssetLimitOffsetPagination
|
||||||
from common.utils import lazyproperty, dict_get_any, is_uuid, get_object_or_none
|
from common.utils import lazyproperty
|
||||||
from assets.utils import get_node, is_query_node_all_assets
|
from assets.utils import get_node, is_query_node_all_assets
|
||||||
|
|
||||||
|
|
||||||
class SerializeToTreeNodeMixin:
|
class SerializeToTreeNodeMixin:
|
||||||
permission_classes = ()
|
|
||||||
|
|
||||||
def serialize_nodes(self, nodes: List[Node], with_asset_amount=False):
|
def serialize_nodes(self, nodes: List[Node], with_asset_amount=False):
|
||||||
if with_asset_amount:
|
if with_asset_amount:
|
||||||
def _name(node: Node):
|
def _name(node: Node):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
|
|
||||||
from .auth import *
|
from .connection_token import *
|
||||||
from .token import *
|
from .token import *
|
||||||
from .mfa import *
|
from .mfa import *
|
||||||
from .access_key import *
|
from .access_key import *
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
from rest_framework.generics import UpdateAPIView
|
from rest_framework.generics import UpdateAPIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
from rest_framework.permissions import AllowAny
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.utils.translation import ugettext as _
|
|
||||||
|
|
||||||
from common.utils import get_logger, get_object_or_none
|
from common.utils import get_logger
|
||||||
from common.permissions import IsOrgAdmin
|
from common.permissions import IsOrgAdmin
|
||||||
from ..models import LoginConfirmSetting
|
from ..models import LoginConfirmSetting
|
||||||
from ..serializers import LoginConfirmSettingSerializer
|
from ..serializers import LoginConfirmSettingSerializer
|
||||||
|
@ -32,7 +32,7 @@ class LoginConfirmSettingUpdateApi(UpdateAPIView):
|
||||||
|
|
||||||
|
|
||||||
class TicketStatusApi(mixins.AuthMixin, APIView):
|
class TicketStatusApi(mixins.AuthMixin, APIView):
|
||||||
permission_classes = ()
|
permission_classes = (AllowAny,)
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -7,6 +7,7 @@ from django.http.response import HttpResponseRedirect
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
from rest_framework.permissions import AllowAny
|
||||||
|
|
||||||
from common.utils.timezone import utcnow
|
from common.utils.timezone import utcnow
|
||||||
from common.const.http import POST, GET
|
from common.const.http import POST, GET
|
||||||
|
@ -31,6 +32,7 @@ class SSOViewSet(AuthMixin, JmsGenericViewSet):
|
||||||
'login_url': SSOTokenSerializer,
|
'login_url': SSOTokenSerializer,
|
||||||
'login': EmptySerializer
|
'login': EmptySerializer
|
||||||
}
|
}
|
||||||
|
permission_classes = (IsSuperUser,)
|
||||||
|
|
||||||
@action(methods=[POST], detail=False, permission_classes=[IsSuperUser], url_path='login-url')
|
@action(methods=[POST], detail=False, permission_classes=[IsSuperUser], url_path='login-url')
|
||||||
def login_url(self, request, *args, **kwargs):
|
def login_url(self, request, *args, **kwargs):
|
||||||
|
@ -54,7 +56,7 @@ class SSOViewSet(AuthMixin, JmsGenericViewSet):
|
||||||
login_url = '%s?%s' % (reverse('api-auth:sso-login', external=True), urlencode(query))
|
login_url = '%s?%s' % (reverse('api-auth:sso-login', external=True), urlencode(query))
|
||||||
return Response(data={'login_url': login_url})
|
return Response(data={'login_url': login_url})
|
||||||
|
|
||||||
@action(methods=[GET], detail=False, filter_backends=[AuthKeyQueryDeclaration], permission_classes=[])
|
@action(methods=[GET], detail=False, filter_backends=[AuthKeyQueryDeclaration], permission_classes=[AllowAny])
|
||||||
def login(self, request: Request, *args, **kwargs):
|
def login(self, request: Request, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
此接口违反了 `Restful` 的规范
|
此接口违反了 `Restful` 的规范
|
||||||
|
|
|
@ -97,7 +97,7 @@ class WithBootstrapToken(permissions.BasePermission):
|
||||||
|
|
||||||
|
|
||||||
class PermissionsMixin(UserPassesTestMixin):
|
class PermissionsMixin(UserPassesTestMixin):
|
||||||
permission_classes = []
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
def get_permissions(self):
|
def get_permissions(self):
|
||||||
return self.permission_classes
|
return self.permission_classes
|
||||||
|
|
|
@ -4,6 +4,7 @@ from django.utils.timesince import timesince
|
||||||
from django.db.models import Count, Max
|
from django.db.models import Count, Max
|
||||||
from django.http.response import JsonResponse, HttpResponse
|
from django.http.response import JsonResponse, HttpResponse
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
from rest_framework.permissions import AllowAny
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
|
|
||||||
from users.models import User
|
from users.models import User
|
||||||
|
@ -307,7 +308,7 @@ class IndexApi(TotalCountMixin, DatesLoginMetricMixin, APIView):
|
||||||
|
|
||||||
|
|
||||||
class PrometheusMetricsApi(APIView):
|
class PrometheusMetricsApi(APIView):
|
||||||
permission_classes = ()
|
permission_classes = (AllowAny,)
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
util = ComponentsPrometheusMetricsUtil()
|
util = ComponentsPrometheusMetricsUtil()
|
||||||
|
|
|
@ -7,7 +7,7 @@ REST_FRAMEWORK = {
|
||||||
# Use Django's standard `django.contrib.auth` permissions,
|
# Use Django's standard `django.contrib.auth` permissions,
|
||||||
# or allow read-only access for unauthenticated users.
|
# or allow read-only access for unauthenticated users.
|
||||||
'DEFAULT_PERMISSION_CLASSES': (
|
'DEFAULT_PERMISSION_CLASSES': (
|
||||||
'common.permissions.IsOrgAdmin',
|
'common.permissions.IsSuperUser',
|
||||||
),
|
),
|
||||||
'DEFAULT_RENDERER_CLASSES': (
|
'DEFAULT_RENDERER_CLASSES': (
|
||||||
'rest_framework.renderers.JSONRenderer',
|
'rest_framework.renderers.JSONRenderer',
|
||||||
|
|
|
@ -9,6 +9,7 @@ from django.views.generic import View
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
from rest_framework.permissions import AllowAny
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
|
||||||
|
@ -64,7 +65,7 @@ def redirect_old_apps_view(request, *args, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
class HealthCheckView(APIView):
|
class HealthCheckView(APIView):
|
||||||
permission_classes = ()
|
permission_classes = (AllowAny,)
|
||||||
|
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
return JsonResponse({"status": 1, "time": int(time.time())})
|
return JsonResponse({"status": 1, "time": int(time.time())})
|
||||||
|
|
Loading…
Reference in New Issue