diff --git a/web/src/app/app/datasets/[datasetId]/permissions/HeaderExplanation.tsx b/web/src/app/app/_components/PermissionComponents/HeaderExplanation.tsx
similarity index 100%
rename from web/src/app/app/datasets/[datasetId]/permissions/HeaderExplanation.tsx
rename to web/src/app/app/_components/PermissionComponents/HeaderExplanation.tsx
diff --git a/web/src/app/app/datasets/[datasetId]/permissions/PermissionSearch.tsx b/web/src/app/app/_components/PermissionComponents/PermissionSearch.tsx
similarity index 100%
rename from web/src/app/app/datasets/[datasetId]/permissions/PermissionSearch.tsx
rename to web/src/app/app/_components/PermissionComponents/PermissionSearch.tsx
diff --git a/web/src/app/app/_components/PermissionComponents/index.ts b/web/src/app/app/_components/PermissionComponents/index.ts
index f4ef7809e..9154d8402 100644
--- a/web/src/app/app/_components/PermissionComponents/index.ts
+++ b/web/src/app/app/_components/PermissionComponents/index.ts
@@ -1 +1,3 @@
export * from './PermissionLineageBreadcrumb';
+export * from './HeaderExplanation';
+export * from './PermissionSearch';
diff --git a/web/src/app/app/datasets/[datasetId]/permissions/dataset-groups/_PermissionDatasetGroups/PermissionDatasetGroups.tsx b/web/src/app/app/datasets/[datasetId]/permissions/dataset-groups/_PermissionDatasetGroups/PermissionDatasetGroups.tsx
index 897f7a3b1..19cd17c03 100644
--- a/web/src/app/app/datasets/[datasetId]/permissions/dataset-groups/_PermissionDatasetGroups/PermissionDatasetGroups.tsx
+++ b/web/src/app/app/datasets/[datasetId]/permissions/dataset-groups/_PermissionDatasetGroups/PermissionDatasetGroups.tsx
@@ -4,8 +4,7 @@ import { useDatasetListDatasetGroups } from '@/api/buster-rest';
import React, { useState } from 'react';
import { useDebounceSearch } from '@/hooks';
import { useMemoizedFn } from 'ahooks';
-import { HeaderExplanation } from '../../HeaderExplanation';
-import { PermissionSearch } from '../../PermissionSearch';
+import { PermissionSearch, HeaderExplanation } from '@/app/app/_components/PermissionComponents';
import { Button } from 'antd';
import { AppMaterialIcons } from '@/components';
import { PermissionListDatasetGroupContainer } from './PermissionListDatasetGroupContainer';
diff --git a/web/src/app/app/datasets/[datasetId]/permissions/overview/_PermissionOverview/PermissionListUserContainer.tsx b/web/src/app/app/datasets/[datasetId]/permissions/overview/_PermissionOverview/PermissionListUserContainer.tsx
index a09b30e40..8329d8dea 100644
--- a/web/src/app/app/datasets/[datasetId]/permissions/overview/_PermissionOverview/PermissionListUserContainer.tsx
+++ b/web/src/app/app/datasets/[datasetId]/permissions/overview/_PermissionOverview/PermissionListUserContainer.tsx
@@ -71,7 +71,7 @@ export const PermissionListUserContainer: React.FC<{
return result;
}, [filteredUsers]);
- const rows = useMemo(
+ const rows: BusterListRowItem[] = useMemo(
() =>
[
{
diff --git a/web/src/app/app/datasets/[datasetId]/permissions/overview/_PermissionOverview/PermissionOverview.tsx b/web/src/app/app/datasets/[datasetId]/permissions/overview/_PermissionOverview/PermissionOverview.tsx
index 39d463745..055949fac 100644
--- a/web/src/app/app/datasets/[datasetId]/permissions/overview/_PermissionOverview/PermissionOverview.tsx
+++ b/web/src/app/app/datasets/[datasetId]/permissions/overview/_PermissionOverview/PermissionOverview.tsx
@@ -2,8 +2,7 @@
import { useGetDatasetPermissionsOverview } from '@/api/buster-rest/datasets';
import React from 'react';
-import { HeaderExplanation } from '../../HeaderExplanation';
-import { PermissionSearch } from '../../PermissionSearch';
+import { PermissionSearch, HeaderExplanation } from '@/app/app/_components/PermissionComponents';
import { PermissionListUserContainer } from './PermissionListUserContainer';
import { useDebounceSearch } from '@/hooks';
diff --git a/web/src/app/app/datasets/[datasetId]/permissions/permission-groups/_PermissionPermissionGroup/PermissionPermissionGroup.tsx b/web/src/app/app/datasets/[datasetId]/permissions/permission-groups/_PermissionPermissionGroup/PermissionPermissionGroup.tsx
index 255eb81f6..7a003a939 100644
--- a/web/src/app/app/datasets/[datasetId]/permissions/permission-groups/_PermissionPermissionGroup/PermissionPermissionGroup.tsx
+++ b/web/src/app/app/datasets/[datasetId]/permissions/permission-groups/_PermissionPermissionGroup/PermissionPermissionGroup.tsx
@@ -1,8 +1,7 @@
'use client';
import React, { useState } from 'react';
-import { HeaderExplanation } from '../../HeaderExplanation';
-import { PermissionSearch } from '../../PermissionSearch';
+import { PermissionSearch, HeaderExplanation } from '@/app/app/_components/PermissionComponents';
import { useMemoizedFn } from 'ahooks';
import { Button } from 'antd';
import { AppMaterialIcons } from '@/components';
diff --git a/web/src/app/app/datasets/[datasetId]/permissions/users/_PermissionUsers/PermissionUsers.tsx b/web/src/app/app/datasets/[datasetId]/permissions/users/_PermissionUsers/PermissionUsers.tsx
index 9b9294bf3..698265aac 100644
--- a/web/src/app/app/datasets/[datasetId]/permissions/users/_PermissionUsers/PermissionUsers.tsx
+++ b/web/src/app/app/datasets/[datasetId]/permissions/users/_PermissionUsers/PermissionUsers.tsx
@@ -1,8 +1,7 @@
'use client';
import React from 'react';
-import { HeaderExplanation } from '../../HeaderExplanation';
-import { PermissionSearch } from '../../PermissionSearch';
+import { PermissionSearch, HeaderExplanation } from '@/app/app/_components/PermissionComponents';
import { useDatasetListPermissionUsers } from '@/api/buster-rest';
import { useDebounceSearch } from '@/hooks';
import { Button } from 'antd';
diff --git a/web/src/app/app/settings/users/[userId]/UserController.tsx b/web/src/app/app/settings/users/[userId]/UserController.tsx
index 8a849ab78..48a764640 100644
--- a/web/src/app/app/settings/users/[userId]/UserController.tsx
+++ b/web/src/app/app/settings/users/[userId]/UserController.tsx
@@ -21,8 +21,8 @@ export const UserController = React.memo(({ userId }: { userId: string }) => {