Skip to content

Commit de6c822

Browse files
authored
fix: enhance permission checks for application access in the API (#7267)
1 parent 0a050c0 commit de6c822

1 file changed

Lines changed: 32 additions & 5 deletions

File tree

‎apps/oss/views/file.py‎

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
# coding=utf-8
2-
2+
from django.db.models import QuerySet
33
from django.utils.translation import gettext_lazy as _
44
from drf_spectacular.utils import extend_schema
55
from rest_framework.parsers import MultiPartParser
66
from rest_framework.views import APIView, Request
77

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
1014
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
1117
from common.exception.app_exception import AppUnauthorizedFailed
1218
from common.log.log import log
1319
from common.result import result
@@ -107,8 +113,29 @@ class GetUrlView(APIView):
107113
tags=[_("Chat")], # type: ignore
108114
)
109115
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+
112139
url = request.query_params.get("url")
113140
result_data = get_url_content(url, application_id)
114141
return result.success(result_data)

0 commit comments

Comments
 (0)