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
3 changes: 2 additions & 1 deletion apps/application/flow/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -845,7 +845,8 @@ async def anext_async(agen):
},
'KNOWLEDGE': {'search-knowledge-node': lambda n: n.get('properties').get('node_data').get('knowledge_id_list')},
'APPLICATION': {
'application-node': lambda n: [n.get('properties').get('node_data').get('application_id')]
'application-node': lambda n: [n.get('properties').get('node_data').get('application_id')],
'ai-chat-node': lambda n: [*(n.get('properties').get('node_data').get('application_ids') or [])],
}
}

Expand Down
41 changes: 25 additions & 16 deletions apps/common/constants/permission_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -708,15 +708,15 @@ class PermissionConstants(Enum):
parent_group=[WorkspaceGroup.KNOWLEDGE, UserGroup.KNOWLEDGE]
)
KNOWLEDGE_BATCH_DELETE = Permission(group=Group.KNOWLEDGE, operate=Operate.BATCH_DELETE,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
resource_permission_group_list=[ResourcePermissionConst.KNOWLEDGE_MANGE],
parent_group=[WorkspaceGroup.KNOWLEDGE, UserGroup.KNOWLEDGE],
)
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
resource_permission_group_list=[ResourcePermissionConst.KNOWLEDGE_MANGE],
parent_group=[WorkspaceGroup.KNOWLEDGE, UserGroup.KNOWLEDGE],
)
KNOWLEDGE_BATCH_MOVE = Permission(group=Group.KNOWLEDGE, operate=Operate.BATCH_MOVE,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
resource_permission_group_list=[ResourcePermissionConst.KNOWLEDGE_MANGE],
parent_group=[WorkspaceGroup.KNOWLEDGE, UserGroup.KNOWLEDGE],
)
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
resource_permission_group_list=[ResourcePermissionConst.KNOWLEDGE_MANGE],
parent_group=[WorkspaceGroup.KNOWLEDGE, UserGroup.KNOWLEDGE],
)
KNOWLEDGE_RESOURCE_AUTHORIZATION = Permission(
group=Group.KNOWLEDGE, operate=Operate.AUTH, role_list=[RoleConstants.ADMIN, RoleConstants.USER],
resource_permission_group_list=[ResourcePermissionConst.KNOWLEDGE_MANGE],
Expand Down Expand Up @@ -1055,21 +1055,26 @@ class PermissionConstants(Enum):
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
)
APPLICATION_BATCH_DELETE = Permission(group=Group.APPLICATION, operate=Operate.BATCH_DELETE,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
)
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
)
APPLICATION_BATCH_MOVE = Permission(group=Group.APPLICATION, operate=Operate.BATCH_MOVE,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
)
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
)
APPLICATION_RESOURCE_AUTHORIZATION = Permission(group=Group.APPLICATION, operate=Operate.AUTH,
role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[
ResourcePermissionConst.APPLICATION_MANGE],
)
APPLICATION_RELATE_RESOURCE_VIEW = Permission(
group=Group.APPLICATION, operate=Operate.RELATE_VIEW, role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE]
)
APPLICATION_TRIGGER_READ = Permission(
group=Group.APPLICATION, operate=Operate.TRIGGER_READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER],
parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION],
Expand Down Expand Up @@ -1592,6 +1597,10 @@ class PermissionConstants(Enum):
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.TRIGGER_DELETE, role_list=[RoleConstants.ADMIN],
parent_group=[SystemGroup.RESOURCE_APPLICATION], is_ee=settings.edition == "EE"
)
RESOURCE_APPLICATION_RELATE_RESOURCE_VIEW = Permission(
group=Group.SYSTEM_RES_APPLICATION, operate=Operate.RELATE_VIEW, role_list=[RoleConstants.ADMIN],
parent_group=[SystemGroup.RESOURCE_APPLICATION], is_ee=settings.edition == "EE"
)
RESOURCE_APPLICATION_OVERVIEW_READ = Permission(
group=Group.SYSTEM_RES_APPLICATION_OVERVIEW, operate=Operate.READ, role_list=[RoleConstants.ADMIN],
parent_group=[SystemGroup.RESOURCE_APPLICATION], is_ee=settings.edition == "EE"
Expand Down
51 changes: 51 additions & 0 deletions apps/system_manage/serializers/resource_mapping_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,54 @@ def get_resource_count(self, result_list):
model['resource_count'] = count_dict.get(model_id, 0)

return result_list


class MappingResourceSerializer(serializers.Serializer):
resource = serializers.CharField(required=True, label=_('resource'))
resource_id = serializers.UUIDField(required=True, label=_('resource Id'))

resource_name = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_('resource Name'))
target_type = serializers.ListField(
label=_('target Type'),
child=serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_('target Type')))
user_name = serializers.CharField(required=True, allow_null=True, allow_blank=True, label=_('creator'))
workspace_ids = serializers.CharField(required=False, label=_('workspace_ids'))

def get_query_set(self):
queryset = QuerySet(model=get_dynamics_model({
'tdc.name': models.CharField(),
'source_id': models.CharField(),
"source_type": models.CharField(),
"u.username": models.CharField(),
'rm.target_type': models.CharField(),
'workspace_id': models.CharField(),
}))

queryset = queryset.filter(source_id=self.data.get('resource_id'),
source_type=self.data.get('resource'))

if self.data.get('resource_name'):
queryset = queryset.filter(**{'tdc.name__icontains': self.data.get('resource_name')})
if self.data.get('user_name'):
queryset = queryset.filter(**{'u.username__icontains': self.data.get('user_name')})
if self.data.get("target_type"):
queryset = queryset.filter(**{'rm.target_type__in': self.data.get('target_type')})
if self.data.get('workspace_ids') is not None and len(self.data.get('workspace_ids')) > 0:
workspace_ids = json.loads(self.data.get('workspace_ids'))
queryset = queryset.filter(**{'workspace_id__in': workspace_ids})

return queryset

@staticmethod
def is_x_pack_ee():
workspace_model = DatabaseModelManage.get_model("workspace_model")
return workspace_model is not None

def page(self, current_page, page_size):
is_x_pack_ee = self.is_x_pack_ee()

return native_page_search(current_page, page_size, self.get_query_set(), get_file_content(
os.path.join(PROJECT_DIR, "apps", "system_manage",
'sql', 'list_mapping_resource_ee.sql' if is_x_pack_ee else 'list_mapping_resource.sql')),
with_table_name=False
)
49 changes: 49 additions & 0 deletions apps/system_manage/sql/list_mapping_resource.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
WITH target_data_cte AS (SELECT 'APPLICATION' as target_type,
id,
"name",
"desc",
"user_id",
"workspace_id",
"icon",
"type",
"folder_id"
FROM application
UNION ALL
SELECT 'KNOWLEDGE' as target_type,
id,
"name",
"desc",
"user_id",
"workspace_id",
"type"::text as "icon" , "type"::text as "type", "folder_id"
FROM knowledge
UNION ALL
SELECT 'TOOL' as target_type,
id,
"name",
"desc",
"user_id",
"workspace_id",
"icon",
"tool_type" as "type",
"folder_id"
FROM tool
UNION ALL
SELECT 'MODEL' as target_type,
id,
"name",
''::text as "desc", "user_id",
"workspace_id",
"provider" as "icon",
"model_type" as "type",
''::text as "folder_id"
FROM model)
SELECT rm.*,
tdc.*,
u.nick_name as username
FROM resource_mapping rm
LEFT JOIN target_data_cte tdc
ON rm.target_type = tdc.target_type
AND rm.target_id::uuid = tdc.id
LEFT JOIN "public"."user" u
ON u.id = tdc.user_id
52 changes: 52 additions & 0 deletions apps/system_manage/sql/list_mapping_resource_ee.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
WITH target_data_cte AS (SELECT 'APPLICATION' as target_type,
id,
"name",
"desc",
"user_id",
"workspace_id",
"icon",
"type",
"folder_id"
FROM application
UNION ALL
SELECT 'KNOWLEDGE' as target_type,
id,
"name",
"desc",
"user_id",
"workspace_id",
"type"::text as "icon" , "type"::text as "type", "folder_id"
FROM knowledge
UNION ALL
SELECT 'TOOL' as target_type,
id,
"name",
"desc",
"user_id",
"workspace_id",
"icon",
"tool_type" as "type",
"folder_id"
FROM tool
UNION ALL
SELECT 'MODEL' as target_type,
id,
"name",
''::text as "desc", "user_id",
"workspace_id",
"provider" as "icon",
"model_type" as "type",
''::text as "folder_id"
FROM model)
SELECT rm.*,
tdc.*,
u.nick_name as username,
w.name as workspace_name
FROM resource_mapping rm
LEFT JOIN target_data_cte tdc
ON rm.target_type = tdc.target_type
AND rm.target_id::uuid = tdc.id
LEFT JOIN "public"."user" u
ON u.id = tdc.user_id
LEFT JOIN "public"."workspace" w
ON w.id = tdc.workspace_id
1 change: 1 addition & 0 deletions apps/system_manage/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
path('workspace/<str:workspace_id>/resource_user_permission/resource/<str:target>/resource/<str:resource>', views.WorkspaceResourceUserPermissionView.as_view()),
path('workspace/<str:workspace_id>/resource_user_permission/resource/<str:target>/resource/<str:resource>/<int:current_page>/<int:page_size>', views.WorkspaceResourceUserPermissionView.Page.as_view()),
path('workspace/<str:workspace_id>/resource_mapping/<str:resource>/<str:resource_id>/<int:current_page>/<int:page_size>', views.ResourceMappingView.as_view()),
path('workspace/<str:workspace_id>/mapping_resource/<str:resource>/<str:resource_id>/<int:current_page>/<int:page_size>', views.MappingResourceView.as_view()),
path('email_setting', views.SystemSetting.Email.as_view()),
path('profile', views.SystemProfile.as_view()),
path('valid/<str:valid_type>/<int:valid_count>', views.Valid.as_view())
Expand Down
36 changes: 35 additions & 1 deletion apps/system_manage/views/resource_mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from common.constants.permission_constants import Permission, Group, Operate, RoleConstants, ViewPermission, \
CompareConstants
from system_manage.api.resource_mapping import ResourceMappingAPI
from system_manage.serializers.resource_mapping_serializers import ResourceMappingSerializer
from system_manage.serializers.resource_mapping_serializers import ResourceMappingSerializer, MappingResourceSerializer


class ResourceMappingView(APIView):
Expand Down Expand Up @@ -53,3 +53,37 @@ def get(self, request: Request, workspace_id: str, resource: str, resource_id: s
'user_name': request.query_params.get('user_name'),
'source_type': request.query_params.getlist('source_type[]'),
}).page(current_page, page_size))


class MappingResourceView(APIView):
authentication_classes = [TokenAuth]

@extend_schema(
methods=['GET'],
description=_('Retrieve the pagination list of resource relationships'),
operation_id=_('Retrieve the pagination list of resource relationships'), # type: ignore
responses=ResourceMappingAPI.get_response(),
parameters=ResourceMappingAPI.get_parameters(),
tags=[_('Mapping Resource')] # type: ignore
)
@has_permissions(
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
operate=Operate.RELATE_VIEW,
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE"),
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
operate=Operate.RELATE_VIEW,
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('resource_id')}"),
ViewPermission([RoleConstants.USER.get_workspace_role()],
[lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
operate=Operate.SELF,
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('resource_id')}")],
CompareConstants.AND),
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
def get(self, request: Request, workspace_id: str, resource: str, resource_id: str, current_page, page_size):
return result.success(MappingResourceSerializer({
'resource': resource,
'resource_id': resource_id,
'resource_name': request.query_params.get('resource_name'),
'user_name': request.query_params.get('user_name'),
'target_type': request.query_params.getlist('target_type[]'),
}).page(current_page, page_size))
25 changes: 25 additions & 0 deletions ui/src/api/workspace/resource-mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,32 @@ const getResourceMapping: (
loading,
)
}
/**
* 依赖项
* @param workspace_id
* @param resource
* @param resource_id
* @param page
* @param params
* @param loading
* @returns
*/
const getMappingResource: (
workspace_id: string,
resource: string,
resource_id: string,
page: pageRequest,
params?: any,
loading?: Ref<boolean>,
) => Promise<Result<any>> = (workspace_id, resource, resource_id, page, params, loading) => {
return get(
`${prefix}/${workspace_id}/mapping_resource/${resource}/${resource_id}/${page.current_page}/${page.page_size}`,
params,
loading,
)
}

export default {
getResourceMapping,
getMappingResource,
}
Loading
Loading