|
1 | 1 | # coding=utf-8 |
2 | | - |
| 2 | +from django.db.models import QuerySet |
3 | 3 | from django.utils.translation import gettext_lazy as _ |
4 | 4 | from drf_spectacular.utils import extend_schema |
5 | 5 | from rest_framework.parsers import MultiPartParser |
6 | 6 | from rest_framework.views import APIView, Request |
7 | 7 |
|
8 | | -from common.auth import TokenAuth, AllTokenAuth |
9 | | -from common.auth.authentication import has_permissions |
| 8 | +from application.models import Application |
| 9 | +from common.auth import TokenAuth, AllTokenAuth, ChatTokenAuth |
| 10 | +from common.auth.authentication import has_permissions, get_is_permissions |
| 11 | +from common.auth.constants.chat_permission_constants import ChatPermissionConstants |
| 12 | +from common.auth.constants.compare_constants import CompareConstants |
| 13 | +from common.auth.constants.permission_constants import PermissionConstants |
10 | 14 | from common.auth.constants.role_constants import RoleConstants |
| 15 | +from common.auth.struct.aggregate_permission import ViewPermission |
| 16 | +from common.constants.authentication_type import UserType |
11 | 17 | from common.exception.app_exception import AppUnauthorizedFailed |
12 | 18 | from common.log.log import log |
13 | 19 | from common.result import result |
@@ -107,8 +113,29 @@ class GetUrlView(APIView): |
107 | 113 | tags=[_("Chat")], # type: ignore |
108 | 114 | ) |
109 | 115 | def get(self, request: Request, application_id: str): |
110 | | - if "application_id" in request.user.kwargs and str(request.user.kwargs.get("application_id")) != application_id: |
111 | | - return result.error(_("No permission")) |
| 116 | + if isinstance(request.user.type, UserType): |
| 117 | + application = QuerySet(Application).filter(id=application_id).first() |
| 118 | + if application is None: |
| 119 | + raise AppUnauthorizedFailed(403, _("No permission to access")) |
| 120 | + is_permissions = get_is_permissions( |
| 121 | + request, workspace_id=application.workspace_id, application_id=application_id |
| 122 | + ) |
| 123 | + if not is_permissions( |
| 124 | + PermissionConstants.APPLICATION_READ.get_workspace_application_permission(), |
| 125 | + PermissionConstants.APPLICATION_READ.get_workspace_permission_workspace_manage_role(), |
| 126 | + ViewPermission( |
| 127 | + [RoleConstants.USER.get_workspace_role()], |
| 128 | + [PermissionConstants.APPLICATION.get_workspace_application_permission()], |
| 129 | + compare=CompareConstants.AND, |
| 130 | + ), |
| 131 | + RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), |
| 132 | + ): |
| 133 | + raise AppUnauthorizedFailed(403, _("No permission to access")) |
| 134 | + else: |
| 135 | + is_permissions = get_is_permissions(request, application_id=application_id) |
| 136 | + if not is_permissions(ChatPermissionConstants.get_aggregate_permissions()): |
| 137 | + raise AppUnauthorizedFailed(403, _("No permission to access")) |
| 138 | + |
112 | 139 | url = request.query_params.get("url") |
113 | 140 | result_data = get_url_content(url, application_id) |
114 | 141 | return result.success(result_data) |
0 commit comments