diff --git a/frontend/packages/common/src/components/aoplatform/MemberTransfer.tsx b/frontend/packages/common/src/components/aoplatform/MemberTransfer.tsx index b582fe5c..d7972d94 100644 --- a/frontend/packages/common/src/components/aoplatform/MemberTransfer.tsx +++ b/frontend/packages/common/src/components/aoplatform/MemberTransfer.tsx @@ -121,7 +121,6 @@ const generateTree = ( return loop(dataSource); },[dataSource, state.language, searchWord]) - console.log(dataSource) const getInitExpandKeys = (data:T[], expandKeys:string[] = [])=>{ data.forEach((item)=>{ diff --git a/frontend/packages/common/src/const/permissions.ts b/frontend/packages/common/src/const/permissions.ts index 5f0530ba..a8121a7d 100644 --- a/frontend/packages/common/src/const/permissions.ts +++ b/frontend/packages/common/src/const/permissions.ts @@ -276,252 +276,252 @@ export const PERMISSION_DEFINITION = [ }, "team.service.api_doc.view": { "granted": { - "anyOf": [{ "backend": ["team.service.api_doc.view"] }] + "anyOf": [{ "backend": ["system.workspace.service.view_all","team.service.api_doc.view"] }] } }, "team.service.api_doc.add": { "granted": { - "anyOf": [{ "backend": ["team.service.api_doc.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.api_doc.manager"] }] } }, "team.service.api_doc.edit": { "granted": { - "anyOf": [{ "backend": ["team.service.api_doc.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.api_doc.manager"] }] } }, "team.service.service_intro.view": { "granted": { - "anyOf": [{ "backend": ["team.service.service_intro.view"] }] + "anyOf": [{ "backend": ["system.workspace.service.view_all","team.service.service_intro.view"] }] } }, "team.service.service_intro.add": { "granted": { - "anyOf": [{ "backend": ["team.service.service_intro.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.service_intro.manager"] }] } }, "team.service.service_intro.edit": { "granted": { - "anyOf": [{ "backend": ["team.service.service_intro.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.service_intro.manager"] }] } }, "team.service.api_doc.import": { "granted": { - "anyOf": [{ "backend": ["team.service.api_doc.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.api_doc.manager"] }] } }, "team.service.router.view": { "granted": { - "anyOf": [{ "backend": ["team.service.api.view"] }] + "anyOf": [{ "backend": ["system.workspace.service.view_all","team.service.api.view"] }] } }, "team.service.router.add": { "granted": { - "anyOf": [{ "backend": ["team.service.api.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.api.manager"] }] } }, "team.service.router.edit": { "granted": { - "anyOf": [{ "backend": ["team.service.api.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.api.manager"] }] } }, "team.service.router.delete": { "granted": { - "anyOf": [{ "backend": ["team.service.api.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.api.manager"] }] } }, "team.service.upstream.view": { "granted": { - "anyOf": [{ "backend": ["team.service.upstream.view"] }] + "anyOf": [{ "backend": ["system.workspace.service.view_all","team.service.upstream.view"] }] } }, "team.service.upstream.add": { "granted": { - "anyOf": [{ "backend": ["team.service.upstream.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.upstream.manager"] }] } }, "team.service.upstream.edit": { "granted": { - "anyOf": [{ "backend": ["team.service.upstream.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.upstream.manager"] }] } }, "team.service.upstream.delete": { "granted": { - "anyOf": [{ "backend": ["team.service.upstream.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.upstream.manager"] }] } }, "team.service.release.view": { "granted": { - "anyOf": [{ "backend": ["team.service.release.view"] }] + "anyOf": [{ "backend": ["system.workspace.service.view_all","team.service.release.view"] }] } }, "team.service.release.add": { "granted": { - "anyOf": [{ "backend": ["team.service.release.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.release.manager"] }] } }, "team.service.release.online": { "granted": { - "anyOf": [{ "backend": ["team.service.release.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.release.manager"] }] } }, "team.service.release.stop": { "granted": { - "anyOf": [{ "backend": ["team.service.release.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.release.manager"] }] } }, "team.service.release.cancel": { "granted": { - "anyOf": [{ "backend": ["team.service.release.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.release.manager"] }] } }, "team.service.release.rollback": { "granted": { - "anyOf": [{ "backend": ["team.service.release.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.release.manager"] }] } }, "team.service.release.delete": { "granted": { - "anyOf": [{ "backend": ["team.service.release.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.release.manager"] }] } }, "team.service.release.approval": { "granted": { - "anyOf": [{ "backend": ["team.service.release.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.release.manager"] }] } }, "team.service.subscription.view": { "granted": { - "anyOf": [{ "backend": ["team.service.subscription.view"] }] + "anyOf": [{ "backend": ["system.workspace.service.view_all","team.service.subscription.view"] }] } }, "team.service.subscription.approval": { "granted": { - "anyOf": [{ "backend": ["team.service.subscription.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.subscription.manager"] }] } }, "team.service.subscription.add": { "granted": { - "anyOf": [{ "backend": ["team.service.subscription.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.subscription.manager"] }] } }, "team.service.subscription.delete": { "granted": { - "anyOf": [{ "backend": ["team.service.subscription.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.service.subscription.manager"] }] } }, "team.service.service.view": { "granted": { - "anyOf": [{ "backend": ["team.team.service.view"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","system.workspace.service.view_all","team.team.service.view"] }] } }, "team.service.service.add": { "granted": { - "anyOf": [{ "backend": ["team.team.service.manager","team.service.service.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.team.service.manager","team.service.service.manager"] }] } }, "team.service.service.edit": { "granted": { - "anyOf": [{ "backend": ["team.team.service.manager","team.service.service.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.team.service.manager","team.service.service.manager"] }] } }, "team.service.service.delete": { "granted": { - "anyOf": [{ "backend": ["team.team.service.manager","team.service.service.manager"] }] + "anyOf": [{ "backend": ["system.workspace.service.manager_all","team.team.service.manager","team.service.service.manager"] }] } }, "team.application.subscription.view": { "granted": { - "anyOf": [{ "backend": ["team.consumer.subscription.view_subscribed_service"] }] + "anyOf": [{ "backend": ["system.workspace.application.view_all","team.consumer.subscription.view_subscribed_service"] }] } }, "team.application.subscription.add": { "granted": { - "anyOf": [{ "backend": ["team.consumer.subscription.subscribe"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.subscription.subscribe"] }] } }, "team.application.subscription.edit": { "granted": { - "anyOf": [{ "backend": ["team.consumer.subscription.manager_subscribed_services"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.subscription.manager_subscribed_services"] }] } }, "team.application.subscription.delete": { "granted": { - "anyOf": [{ "backend": ["team.team.consumer.subscription.manager_subscribed_services"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al","team.team.consumer.subscription.manager_subscribed_services"] }] } }, "team.application.application.view": { "granted": { - "anyOf": [{ "backend": ["team.team.consumer.view"] }] + "anyOf": [{ "backend": ["system.workspace.application.view_all","team.team.consumer.view"] }] } }, "team.application.application.add": { "granted": { - "anyOf": [{ "backend": ['team.team.consumer.manager',"team.consumer.application.manager"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al",'team.team.consumer.manager',"team.consumer.application.manager"] }] } }, "team.application.application.edit": { "granted": { - "anyOf": [{ "backend": ['team.team.consumer.manager',"team.consumer.application.manager"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al",'team.team.consumer.manager',"team.consumer.application.manager"] }] } }, "team.application.application.delete": { "granted": { - "anyOf": [{ "backend": ['team.team.consumer.manager',"team.consumer.application.manager"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al",'team.team.consumer.manager',"team.consumer.application.manager"] }] } }, "team.consumer.authorization.view": { "granted": { - "anyOf": [{ "backend": ["team.consumer.authorization.view"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al","system.workspace.application.view_all","team.consumer.authorization.view"] }] } }, "team.application.authorization.add": { "granted": { - "anyOf": [{ "backend": ["team.consumer.authorization.manager"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }] } }, "team.application.authorization.edit": { "granted": { - "anyOf": [{ "backend": ["team.consumer.authorization.manager"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }] } }, "team.application.authorization.delete": { "granted": { - "anyOf": [{ "backend": ["team.consumer.authorization.manager"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }] } }, "team.application.authorization.cancelSubApply": { "granted": { - "anyOf": [{ "backend": ["team.consumer.authorization.manager"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }] } }, "team.application.authorization.cancelSub": { "granted": { - "anyOf": [{ "backend": ["team.consumer.authorization.manager"] }] + "anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }] } }, "team.team.team.view": { "granted": { - "anyOf": [{ "backend": ["team.team.team.view"] }] + "anyOf": [{ "backend": ["system.workspace.team.view_all","team.team.team.view"] }] } }, "team.team.team.edit": { "granted": { - "anyOf": [{ "backend": ["team.team.team.manager"] }] + "anyOf": [{ "backend": ["system.workspace.team.manager","team.team.team.manager"] }] } }, "team.team.member.view": { "granted": { - "anyOf": [{ "backend": ["team.team.member.view"] }] + "anyOf": [{ "backend": ["system.workspace.team.view_all","team.team.member.view"] }] } }, "team.team.member.add": { "granted": { - "anyOf": [{ "backend": ["team.team.member.manager"] }] + "anyOf": [{ "backend": ["system.workspace.team.manager","team.team.member.manager"] }] } }, "team.team.member.edit": { "granted": { - "anyOf": [{ "backend": ["team.team.member.manager"] }] + "anyOf": [{ "backend": ["system.workspace.team.manager","team.team.member.manager"] }] } }, "project.mySystem.topology.view": { diff --git a/frontend/packages/common/src/utils/permission.ts b/frontend/packages/common/src/utils/permission.ts index f03fa824..ad02f7f7 100644 --- a/frontend/packages/common/src/utils/permission.ts +++ b/frontend/packages/common/src/utils/permission.ts @@ -13,10 +13,15 @@ export const checkAccess:(access:AccessDataType, accessData:Map return false } const neededBackendAccessArr = PERMISSION_DEFINITION[0]?.[access]?.granted?.anyOf[0].backend || [] - return accessData?.has(accLevel)&& accessData.get(accLevel)!.length > 0 ? hasIntersection(neededBackendAccessArr, accessData.get(accLevel)!) : false + let accessSet = new Set(accessData.get('system')) + if(accLevel === 'team'){ + accessSet = new Set(Array.from(accessSet).concat(accessData?.get('team') || [])) + } + return accessSet!.size > 0 ? hasIntersection(neededBackendAccessArr, accessSet) : false } -const hasIntersection = (arr1:string[], arr2:string[])=> { +const hasIntersection = (arr1:string[], set1:Set)=> { + const arr2 = Array.from(set1) const set = new Set(arr1.length > arr2.length ? arr2:arr1) const arr = arr1.length > arr2.length ? arr1:arr2 for (const item of arr) { diff --git a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx index 0eba2efd..485e3684 100644 --- a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx +++ b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx @@ -84,19 +84,22 @@ const AiServiceInsidePage:FC = ()=> { const filterMenu = (menu:MenuItemGroupType[])=>{ const newMenu = cloneDeep(menu) return newMenu!.filter((m:MenuItemGroupType )=>{ - if(m.children && m.children.length > 0){ + if(m&&m.children && m.children.length > 0){ m.children = m.children.filter( - (c)=>(c&&(c as MenuItemType&{access:string} ).access ? + (c)=>{ + if(!c) return false + return (((c as MenuItemType&{access:string} ).access ? checkPermission((c as MenuItemType&{access:string} ).access as keyof typeof PERMISSION_DEFINITION[0]): - true)) + true))}) } return m.children && m.children.length > 0 }) } const filteredMenu = filterMenu(SYSTEM_PAGE_MENU_ITEMS as MenuItemGroupType[]) - setActiveMenu((pre)=>{ - return pre ?? 'route' - }) + const menu = activeMenu ?? filteredMenu[0]?.children ? filteredMenu[0]?.children?.[0]?.key : filteredMenu[0]?.key + if(menu && currentUrl.split('/')[-1] !== menu){ + navigateTo(`/service/${teamId}/aiInside/${serviceId}/${menu}`) + } return filteredMenu || [] },[accessData,accessInit, SYSTEM_PAGE_MENU_ITEMS]) diff --git a/frontend/packages/core/src/pages/system/SystemInsidePage.tsx b/frontend/packages/core/src/pages/system/SystemInsidePage.tsx index e7ef1176..1685276a 100644 --- a/frontend/packages/core/src/pages/system/SystemInsidePage.tsx +++ b/frontend/packages/core/src/pages/system/SystemInsidePage.tsx @@ -84,19 +84,20 @@ const SystemInsidePage:FC = ()=> { const filterMenu = (menu:MenuItemGroupType[])=>{ const newMenu = cloneDeep(menu) return newMenu!.filter((m:MenuItemGroupType )=>{ - if(m.children && m.children.length > 0){ + if(m&&m.children && m.children.length > 0){ m.children = m.children.filter( - (c)=>(c&&(c as MenuItemType&{access:string} ).access ? + (c)=>{ + if(!c) return false + return (((c as MenuItemType&{access:string} ).access ? checkPermission((c as MenuItemType&{access:string} ).access as keyof typeof PERMISSION_DEFINITION[0]): - true)) + true))}) } return m.children && m.children.length > 0 }) } const filteredMenu = filterMenu(SYSTEM_PAGE_MENU_ITEMS as MenuItemGroupType[]) - setActiveMenu((pre)=>{ - return pre ?? 'route' - }) + const menu = activeMenu ?? filteredMenu[0]?.children ? filteredMenu[0]?.children?.[0]?.key : filteredMenu[0]?.key + if(menu && currentUrl.split('/')[-1] !== menu) navigateTo(`/service/${teamId}/inside/${serviceId}/${menu}`) return filteredMenu || [] },[accessData,accessInit, SYSTEM_PAGE_MENU_ITEMS]) diff --git a/frontend/packages/market/src/pages/serviceHub/ServiceHubDetail.tsx b/frontend/packages/market/src/pages/serviceHub/ServiceHubDetail.tsx index 4284e0cd..69c21350 100644 --- a/frontend/packages/market/src/pages/serviceHub/ServiceHubDetail.tsx +++ b/frontend/packages/market/src/pages/serviceHub/ServiceHubDetail.tsx @@ -89,10 +89,10 @@ const ServiceHubDetail = ()=>{ const getMySelectList = ()=>{ setMySystemOptionList([]) - fetchData>('simple/apps/mine',{method:'GET'}).then(response=>{ + fetchData>('apps/can_subscribe',{method:'GET'}).then(response=>{ const {code,data,msg} = response if(code === STATUS_CODE.SUCCESS){ - setMySystemOptionList(data.apps?.map((x:SimpleSystemItem)=>{return { + setMySystemOptionList(data.apps?.map((x:EntityItem)=>{return { label:x.name, value:x.id }})) }else{ diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx index 994ba88e..73e567bf 100644 --- a/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx +++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx @@ -14,7 +14,9 @@ import { ManagementConfigFieldType } from "./ManagementConfig"; import { useGlobalContext } from "@common/contexts/GlobalStateContext"; import { $t } from "@common/locales"; import { getItem } from "@common/utils/navigation"; -import { MenuItemType } from "antd/es/menu/interface"; +import { MenuItemGroupType, MenuItemType } from "antd/es/menu/interface"; +import { PERMISSION_DEFINITION } from "@common/const/permissions"; +import { cloneDeep } from "lodash-es"; export default function ManagementInsidePage(){ const { message } = App.useApp() @@ -27,17 +29,35 @@ export default function ManagementInsidePage(){ const [openKeys, setOpenKeys] = useState([]) const [loading, setLoading] = useState(false) const {appName,setAppName} = useTenantManagementContext() - const {getTeamAccessData,cleanTeamAccessData,state} = useGlobalContext() + const {getTeamAccessData,cleanTeamAccessData,state,accessData,checkPermission,accessInit} = useGlobalContext() const TENANT_MANAGEMENT_APP_MENU: MenuProps['items'] = useMemo(()=>[ - getItem($t('订阅的服务'), 'service'), - getItem($t('访问授权'), 'authorization'), - getItem($t('消费者管理'), 'setting'), + getItem($t('订阅的服务'), 'service',undefined, undefined, undefined, 'team.application.subscription.view'), + getItem($t('访问授权'), 'authorization',undefined, undefined, undefined, 'team.consumer.authorization.view'), + getItem($t('消费者管理'), 'setting',undefined, undefined, undefined, 'team.application.application.view'), ],[state.language]) + const menuData = useMemo(()=>{ - return TENANT_MANAGEMENT_APP_MENU - },[]) + const filterMenu = (menu:MenuItemGroupType[])=>{ + const newMenu = cloneDeep(menu) + return newMenu!.filter((m:MenuItemGroupType )=>{ + if(m&&m.children && m.children.length > 0){ + m.children = m.children.filter( + (c)=>{ + if(!c) return false + return (((c as MenuItemType&{access:string} ).access ? + checkPermission((c as MenuItemType&{access:string} ).access as keyof typeof PERMISSION_DEFINITION[0]): + true))}) + } + return m.children && m.children.length > 0 + }) + } + const filteredMenu = filterMenu(TENANT_MANAGEMENT_APP_MENU as MenuItemGroupType[]) + const menu = activeMenu ?? filteredMenu[0]?.children ? filteredMenu[0]?.children?.[0]?.key : filteredMenu[0]?.key + if(menu && currentUrl.split('/')[-1] !== menu) navigateTo(`/consumer/${teamId}/inside/${appId}/${menu}`) + return filteredMenu || [] + },[accessData,accessInit, TENANT_MANAGEMENT_APP_MENU]) useEffect(()=>{ setActiveMenu(currentUrl.split('/').pop() || 'service')