Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apps/application/views/application_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ class OpenView(APIView):
responses=None,
tags=[_('Application')] # type: ignore
)
@has_permissions(PermissionConstants.APPLICATION_DEBUG.get_workspace_application_permission(),
PermissionConstants.APPLICATION_DEBUG.get_workspace_permission_workspace_manage_role(),
@has_permissions(PermissionConstants.APPLICATION_EDIT.get_workspace_application_permission(),
PermissionConstants.APPLICATION_EDIT.get_workspace_permission_workspace_manage_role(),
ViewPermission([RoleConstants.USER.get_workspace_role()],
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
CompareConstants.AND),
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code has been corrected with the appropriate permissions. Here's the optimized version:

from rest_framework.views import APIView
from rest_framework.response import Response
from django.utils.translation import gettext_lazy as _
from permission_classes import has_permissions

class OpenView(APIView):
    authentication_classes = []
    throttle_classses = []

        # Permissions need to be defined based on roles and application access levels
        return Response(status=403)  # Return an error response due to missing or incorrect permissions

# Adjust the permissions as needed for different applications

This version includes adjustments to ensure correct usage of permssion_classes (which should include all necessary middleware for checking user permissions), provides specific details about how authentication is managed, and suggests returning a 403 Forbidden status when unauthorized access is detected.

Expand Down
4 changes: 2 additions & 2 deletions apps/application/views/application_chat_record.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ class ApplicationChatRecordOperateAPI(APIView):
)
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_application_permission(),
PermissionConstants.APPLICATION_CHAT_LOG_READ.get_workspace_permission_workspace_manage_role(),
PermissionConstants.APPLICATION_DEBUG.get_workspace_application_permission(),
PermissionConstants.APPLICATION_DEBUG.get_workspace_permission_workspace_manage_role(),
PermissionConstants.APPLICATION_EDIT.get_workspace_application_permission(),
PermissionConstants.APPLICATION_EDIT.get_workspace_permission_workspace_manage_role(),
ViewPermission([RoleConstants.USER.get_workspace_role()],
[PermissionConstants.APPLICATION.get_workspace_application_permission()],
CompareConstants.AND),
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The provided Python function for class ApplicationChatRecordOperateAPI appears to be part of an API interface that handles chat logging operations within a workspace, with role-based access control enforcement through permission checks.

Overall, the permissions specified seem mostly appropriate for accessing and managing chat records:

  1. Workspace application read and manage role: This allows users to view and administer chat history.
  2. Application edit and manage role: Although typically associated with editing general applications rather than chat logs specifically, it ensures broader administrative capabilities if needed.

Potential Issues

  • No specific checks are included for actions other than getting and listing chat messages (Action.GET, Action.LIST). For example, writing new messages would not trigger these permissions unless explicitly checked elsewhere within the codebase.

    Optimization Suggestion: Ensure that all relevant data manipulation actions result in checking and enforcing appropriate roles.

Additional Considerations

  • The current implementation only lists methods without details on their intended behavior or parameters. If there's additional functionality beyond just reading and listing chat logs, more detailed method signatures should be provided.

    Optimization Suggestion: Include comprehensive documentation and comments explaining each method purpose, inputs, outputs, and side effects.

Summary

This code snippet seems broadly correct given its primary intent is to restrict access based on specific roles for viewing and managing chat records. However, thorough validation of action permissions across various endpoints is crucial for maintaining security and integrity in your API system.

Expand Down
48 changes: 18 additions & 30 deletions apps/common/constants/permission_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,12 +510,6 @@ class PermissionConstants(Enum):
parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL],
resource_permission_group_list=[ResourcePermissionConst.TOOL_MANGE]
)

TOOL_DEBUG = Permission(
group=Group.TOOL, operate=Operate.DEBUG, role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL],
resource_permission_group_list=[ResourcePermissionConst.TOOL_MANGE]
)
TOOL_IMPORT = Permission(
group=Group.TOOL, operate=Operate.IMPORT, role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL],
Expand Down Expand Up @@ -804,16 +798,21 @@ class PermissionConstants(Enum):
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_VIEW],
)
APPLICATION_DEBUG = Permission(group=Group.APPLICATION, operate=Operate.DEBUG,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
)
APPLICATION_CREATE = Permission(group=Group.APPLICATION, operate=Operate.CREATE,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
)
APPLICATION_EDIT = Permission(group=Group.APPLICATION, operate=Operate.EDIT,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
)
APPLICATION_DELETE = Permission(group=Group.APPLICATION, operate=Operate.DELETE,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
)
APPLICATION_IMPORT = Permission(group=Group.APPLICATION, operate=Operate.IMPORT,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
Expand All @@ -824,17 +823,6 @@ class PermissionConstants(Enum):
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
)

APPLICATION_DELETE = Permission(group=Group.APPLICATION, operate=Operate.DELETE,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
)
APPLICATION_EDIT = Permission(group=Group.APPLICATION, operate=Operate.EDIT,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
)
APPLICATION_RESOURCE_AUTHORIZATION = Permission(group=Group.APPLICATION, operate=Operate.AUTH,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
Expand Down Expand Up @@ -1233,20 +1221,20 @@ class PermissionConstants(Enum):
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.READ, role_list=[RoleConstants.ADMIN],
parent_group=[SystemGroup.RESOURCE_APPLICATION], is_ee=settings.edition == "EE"
)
RESOURCE_APPLICATION_DEBUG = Permission(
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.DEBUG, role_list=[RoleConstants.ADMIN],
parent_group=[SystemGroup.RESOURCE_APPLICATION], is_ee=settings.edition == "EE"
)
RESOURCE_APPLICATION_EXPORT = Permission(
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.EXPORT, role_list=[RoleConstants.ADMIN],
RESOURCE_APPLICATION_EDIT = Permission(
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.EDIT, role_list=[RoleConstants.ADMIN],
parent_group=[SystemGroup.RESOURCE_APPLICATION], is_ee=settings.edition == "EE"
)
RESOURCE_APPLICATION_DELETE = Permission(
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.DELETE, role_list=[RoleConstants.ADMIN],
parent_group=[SystemGroup.RESOURCE_APPLICATION], is_ee=settings.edition == "EE"
)
RESOURCE_APPLICATION_EDIT = Permission(
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.EDIT, role_list=[RoleConstants.ADMIN],
RESOURCE_APPLICATION_DEBUG = Permission(
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.DEBUG, role_list=[RoleConstants.ADMIN],
parent_group=[SystemGroup.RESOURCE_APPLICATION], is_ee=settings.edition == "EE"
)
RESOURCE_APPLICATION_EXPORT = Permission(
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.EXPORT, role_list=[RoleConstants.ADMIN],
parent_group=[SystemGroup.RESOURCE_APPLICATION], is_ee=settings.edition == "EE"
)
RESOURCE_APPLICATION_AUTH = Permission(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code contains several inconsistencies:

  1. Duplicate definitions for TOOL_DEBUG.
  • TOOL_DEBUG = Permission(
  •    group=Group.TOOL, operate=Operate.DEBUG, role_list=[RoleConstants.ADMIN, RoleConstants.USER],
    
  •    parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL],
    
  •    resource_permission_group_list=[ResourcePermissionConst.TOOL_MANGE]
    
  • )

2. Missing definition for `TOOL_DESTROY` (or similar).

3. Multiple occurrences of the same permission object (`RESOURCE_APPLICATION_EDIT`) at different lines:
```python
- RESOURCE_APPLICATION_EDIT = Permission(
-       group=Group.SYSTEM_RES_APPLICATION, operate=Operate.EDIT, role_list=[RoleConstants.ADMIN],
+   RESOURCE_APPLICATION_DEBUG = Permission(
+       group=Group.SYSTEM_RES_APPLICATION, operate=Operate.DEBUG, role_list=[RoleConstants.ADMIN],
  1. The line RESOURCE_APPLICATION_DELETE = Permission(group=Group.SYSTEM_RES_APPLICATION, ...) is commented out, but there is no corresponding delete operation defined.

Here are some optimization suggestions:

  • Merge duplicate permissions into a single one if they have the same attributes.
  • Ensure all operations are covered without leaving gaps.
  • Remove unnecessary comments to improve readability.

Fixing these issues will make the code cleaner and more maintainable.

Expand Down
4 changes: 2 additions & 2 deletions apps/tools/views/tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ class Debug(APIView):
tags=[_('Tool')] # type: ignore
)
@has_permissions(
PermissionConstants.TOOL_DEBUG.get_workspace_permission(),
PermissionConstants.TOOL_DEBUG.get_workspace_permission_workspace_manage_role(),
PermissionConstants.TOOL_EDIT.get_workspace_permission(),
PermissionConstants.TOOL_EDIT.get_workspace_permission_workspace_manage_role(),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), RoleConstants.USER.get_workspace_role()
)
def post(self, request: Request, workspace_id: str):
Expand Down
4 changes: 2 additions & 2 deletions ui/src/permission/application/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ const workspace = {
[
new ComplexPermission([RoleConst.USER],[PermissionConst.APPLICATION.getApplicationWorkspaceResourcePermission(source_id)],[],'AND'),
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.APPLICATION_DEBUG.getWorkspacePermissionWorkspaceManageRole,
PermissionConst.APPLICATION_DEBUG.getApplicationWorkspaceResourcePermission(source_id)
PermissionConst.APPLICATION_EDIT.getWorkspacePermissionWorkspaceManageRole,
PermissionConst.APPLICATION_EDIT.getApplicationWorkspaceResourcePermission(source_id)
],
'OR'
),
Expand Down
4 changes: 2 additions & 2 deletions ui/src/permission/tool/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ const workspace = {
[
RoleConst.USER.getWorkspaceRole,
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
PermissionConst.TOOL_DEBUG.getWorkspacePermission,
PermissionConst.TOOL_DEBUG.getWorkspacePermissionWorkspaceManageRole
PermissionConst.TOOL_EDIT.getWorkspacePermission,
PermissionConst.TOOL_EDIT.getWorkspacePermissionWorkspaceManageRole
],
'OR'
),
Expand Down
2 changes: 0 additions & 2 deletions ui/src/utils/permission/data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ const PermissionConst = {
APPLICATION_CREATE: new Permission('APPLICATION:READ+CREATE'),
APPLICATION_IMPORT: new Permission('APPLICATION:READ+IMPORT'),
APPLICATION_SETTING: new Permission('APPLICATION:READ+SETTING'),
APPLICATION_DEBUG: new Permission('APPLICATION:READ+DEBUG'),
APPLICATION_TO_CHAT: new Permission('APPLICATION:READ+TO_CHAT'),

APPLICATION_OVERVIEW_READ: new Permission('APPLICATION_OVERVIEW:READ'),
Expand Down Expand Up @@ -207,7 +206,6 @@ const PermissionConst = {
TOOL_EDIT: new Permission('TOOL:READ+EDIT'),
TOOL_READ: new Permission('TOOL:READ'),
TOOL_DELETE: new Permission('TOOL:READ+DELETE'),
TOOL_DEBUG: new Permission('TOOL:READ+DEBUG'),
TOOL_IMPORT: new Permission('TOOL:READ+IMPORT'),
TOOL_EXPORT: new Permission('TOOL:READ+EXPORT'),

Expand Down
Loading