From ff4eb1eff335163cb8bfeda381522a2e578e9d04 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 19 Dec 2024 17:45:46 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor(claims):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=A3=B0=E6=98=8E=E5=BC=B9=E7=AA=97=E4=B8=BA?= =?UTF-8?q?=E5=85=AC=E5=85=B1=E7=BB=84=E4=BB=B6.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packages/@abp/identity/src/api/users.ts | 20 ++- .../ClaimModal.vue} | 37 ++-- .../src/components/claims/ClaimTable.vue | 156 +++++++++++++++++ .../identity/src/components/claims/types.ts | 35 ++++ .../src/components/users/UserClaimModal.vue | 160 +++++------------- .../src/components/users/UserTable.vue | 1 + .../@abp/identity/src/types/claim-types.ts | 19 --- .../@abp/identity/src/types/claims.ts | 28 +++ .../packages/@abp/identity/src/types/users.ts | 17 -- 9 files changed, 287 insertions(+), 186 deletions(-) rename apps/vben5/packages/@abp/identity/src/components/{users/UserClaimEditModal.vue => claims/ClaimModal.vue} (72%) create mode 100644 apps/vben5/packages/@abp/identity/src/components/claims/ClaimTable.vue create mode 100644 apps/vben5/packages/@abp/identity/src/components/claims/types.ts create mode 100644 apps/vben5/packages/@abp/identity/src/types/claims.ts diff --git a/apps/vben5/packages/@abp/identity/src/api/users.ts b/apps/vben5/packages/@abp/identity/src/api/users.ts index f73e7a2dc..56848c068 100644 --- a/apps/vben5/packages/@abp/identity/src/api/users.ts +++ b/apps/vben5/packages/@abp/identity/src/api/users.ts @@ -1,13 +1,15 @@ import type { ListResultDto, PagedResultDto } from '@abp/core'; import type { IdentityRoleDto, OrganizationUnitDto } from '../types'; +import type { + IdentityClaimCreateDto, + IdentityClaimDeleteDto, + IdentityClaimDto, + IdentityClaimUpdateDto, +} from '../types/claims'; import type { ChangeUserPasswordInput, GetUserPagedListInput, - IdentityUserClaimCreateDto, - IdentityUserClaimDeleteDto, - IdentityUserClaimDto, - IdentityUserClaimUpdateDto, IdentityUserCreateDto, IdentityUserDto, IdentityUserUpdateDto, @@ -158,8 +160,8 @@ export function getRolesApi( */ export function getClaimsApi( id: string, -): Promise> { - return requestClient.get>( +): Promise> { + return requestClient.get>( `/api/identity/users/${id}/claims`, ); } @@ -171,7 +173,7 @@ export function getClaimsApi( */ export function deleteClaimApi( id: string, - input: IdentityUserClaimDeleteDto, + input: IdentityClaimDeleteDto, ): Promise { return requestClient.delete(`/api/identity/users/${id}/claims`, { params: input, @@ -185,7 +187,7 @@ export function deleteClaimApi( */ export function createClaimApi( id: string, - input: IdentityUserClaimCreateDto, + input: IdentityClaimCreateDto, ): Promise { return requestClient.post(`/api/identity/users/${id}/claims`, input); } @@ -197,7 +199,7 @@ export function createClaimApi( */ export function updateClaimApi( id: string, - input: IdentityUserClaimUpdateDto, + input: IdentityClaimUpdateDto, ): Promise { return requestClient.put(`/api/identity/users/${id}/claims`, input); } diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserClaimEditModal.vue b/apps/vben5/packages/@abp/identity/src/components/claims/ClaimModal.vue similarity index 72% rename from apps/vben5/packages/@abp/identity/src/components/users/UserClaimEditModal.vue rename to apps/vben5/packages/@abp/identity/src/components/claims/ClaimModal.vue index 94ce61037..4709cd7e4 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserClaimEditModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/claims/ClaimModal.vue @@ -1,22 +1,19 @@ + + + + diff --git a/apps/vben5/packages/@abp/identity/src/components/claims/types.ts b/apps/vben5/packages/@abp/identity/src/components/claims/types.ts new file mode 100644 index 000000000..6f2f6a22b --- /dev/null +++ b/apps/vben5/packages/@abp/identity/src/components/claims/types.ts @@ -0,0 +1,35 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + IdentityClaimCreateDto, + IdentityClaimDeleteDto, + IdentityClaimDto, + IdentityClaimUpdateDto, +} from '../../types/claims'; + +interface ClaimEditModalProps { + /** 新增声明api */ + createApi: (input: IdentityClaimCreateDto) => Promise; + /** 新增声明权限代码 */ + createPolicy: string; + /** 删除声明api */ + deleteApi: (input: IdentityClaimDeleteDto) => Promise; + /** 删除声明权限代码 */ + deletePolicy: string; + /** 更新声明api */ + updateApi: (input: IdentityClaimUpdateDto) => Promise; + /** 更新声明权限代码 */ + updatePolicy: string; +} + +interface ClaimModalProps extends ClaimEditModalProps { + /** 加载声明列表api */ + getApi: () => Promise>; +} + +interface ClaimModalEvents { + (event: 'change', data: IdentityClaimDto): void; + (event: 'onDelete'): void; +} + +export type { ClaimEditModalProps, ClaimModalEvents, ClaimModalProps }; diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserClaimModal.vue b/apps/vben5/packages/@abp/identity/src/components/users/UserClaimModal.vue index e29a306ad..1ce9b43e2 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserClaimModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/users/UserClaimModal.vue @@ -1,26 +1,30 @@ diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue b/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue index 758e31ebd..ec654fa32 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue @@ -194,6 +194,7 @@ const handleUnlock = async (row: IdentityUserDto) => { const handleMenuClick = async (row: IdentityUserDto, info: MenuInfo) => { switch (info.key) { case 'claims': { + console.log(claimModalApi); claimModalApi.setData(row); claimModalApi.open(); break; diff --git a/apps/vben5/packages/@abp/identity/src/types/claim-types.ts b/apps/vben5/packages/@abp/identity/src/types/claim-types.ts index 09741db51..2a7215ada 100644 --- a/apps/vben5/packages/@abp/identity/src/types/claim-types.ts +++ b/apps/vben5/packages/@abp/identity/src/types/claim-types.ts @@ -42,28 +42,9 @@ interface GetIdentityClaimTypePagedListInput filter?: string; } -interface IdentityClaimDto { - claimType: string; - claimValue: string; -} - -interface IdentityClaimDeleteDto { - claimType: string; - claimValue: string; -} - -type IdentityClaimCreateDto = IdentityClaimDeleteDto; - -interface IdentityClaimUpdateDto extends IdentityClaimDeleteDto { - newClaimValue: string; -} - export type { GetIdentityClaimTypePagedListInput, - IdentityClaimCreateDto, - IdentityClaimDto, IdentityClaimTypeCreateDto, IdentityClaimTypeDto, IdentityClaimTypeUpdateDto, - IdentityClaimUpdateDto, }; diff --git a/apps/vben5/packages/@abp/identity/src/types/claims.ts b/apps/vben5/packages/@abp/identity/src/types/claims.ts new file mode 100644 index 000000000..7e1a61d75 --- /dev/null +++ b/apps/vben5/packages/@abp/identity/src/types/claims.ts @@ -0,0 +1,28 @@ +interface IdentityClaimDto { + claimType: string; + claimValue: string; + id: string; +} + +interface IdentityClaimDeleteDto { + claimType: string; + claimValue: string; +} + +interface IdentityClaimUpdateDto { + claimType: string; + claimValue: string; + newClaimValue: string; +} + +interface IdentityClaimCreateDto { + claimType: string; + claimValue: string; +} + +export type { + IdentityClaimCreateDto, + IdentityClaimDeleteDto, + IdentityClaimDto, + IdentityClaimUpdateDto, +}; diff --git a/apps/vben5/packages/@abp/identity/src/types/users.ts b/apps/vben5/packages/@abp/identity/src/types/users.ts index 075564265..9c718cd88 100644 --- a/apps/vben5/packages/@abp/identity/src/types/users.ts +++ b/apps/vben5/packages/@abp/identity/src/types/users.ts @@ -6,8 +6,6 @@ import type { PagedAndSortedResultRequestDto, } from '@abp/core'; -import type { IdentityClaimDto } from './claim-types'; - /** 用户对象接口 */ interface IUser { /** 邮件地址 */ @@ -92,25 +90,10 @@ interface GetUserPagedListInput extends PagedAndSortedResultRequestDto { type IdentityUserCreateDto = IdentityUserCreateOrUpdateDto; type IdentityUserUpdateDto = IdentityUserCreateOrUpdateDto; -interface IdentityUserClaimDto extends IdentityClaimDto { - id: string; -} - -interface IdentityUserClaimUpdateDto extends IdentityClaimDto { - newClaimValue: string; -} - -type IdentityUserClaimDeleteDto = IdentityClaimDto; -type IdentityUserClaimCreateDto = IdentityClaimDto; - export type { ChangeMyPasswordInput, ChangeUserPasswordInput, GetUserPagedListInput, - IdentityUserClaimCreateDto, - IdentityUserClaimDeleteDto, - IdentityUserClaimDto, - IdentityUserClaimUpdateDto, IdentityUserCreateDto, IdentityUserDto, IdentityUserOrganizationUnitUpdateDto, From dfbc1595e0fc7bf38ea073b97203901e2b00f02f Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 19 Dec 2024 17:52:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(roles):=20=E5=A2=9E=E5=8A=A0=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E5=A3=B0=E6=98=8E=E7=AE=A1=E7=90=86.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packages/@abp/identity/src/api/roles.ts | 58 ++++++++++++- .../src/components/roles/RoleClaimModal.vue | 81 +++++++++++++++++++ .../src/components/roles/RoleTable.vue | 10 +++ .../src/components/users/UserTable.vue | 1 - 4 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue diff --git a/apps/vben5/packages/@abp/identity/src/api/roles.ts b/apps/vben5/packages/@abp/identity/src/api/roles.ts index 06da49391..652cd79b5 100644 --- a/apps/vben5/packages/@abp/identity/src/api/roles.ts +++ b/apps/vben5/packages/@abp/identity/src/api/roles.ts @@ -1,5 +1,11 @@ -import type { PagedResultDto } from '@abp/core'; +import type { ListResultDto, PagedResultDto } from '@abp/core'; +import type { + IdentityClaimCreateDto, + IdentityClaimDeleteDto, + IdentityClaimDto, + IdentityClaimUpdateDto, +} from '../types/claims'; import type { GetRolePagedListInput, IdentityRoleCreateDto, @@ -78,3 +84,53 @@ export function removeOrganizationUnitApi( `/api/identity/roles/${id}/organization-units/${ouId}`, ); } + +/** + * 获取角色声明列表 + * @param id 角色id + */ +export function getClaimsApi( + id: string, +): Promise> { + return requestClient.get>( + `/api/identity/roles/${id}/claims`, + ); +} + +/** + * 删除角色声明 + * @param id 角色id + * @param input 角色声明dto + */ +export function deleteClaimApi( + id: string, + input: IdentityClaimDeleteDto, +): Promise { + return requestClient.delete(`/api/identity/roles/${id}/claims`, { + params: input, + }); +} + +/** + * 创建角色声明 + * @param id 角色id + * @param input 角色声明dto + */ +export function createClaimApi( + id: string, + input: IdentityClaimCreateDto, +): Promise { + return requestClient.post(`/api/identity/roles/${id}/claims`, input); +} + +/** + * 更新角色声明 + * @param id 角色id + * @param input 用户角色dto + */ +export function updateClaimApi( + id: string, + input: IdentityClaimUpdateDto, +): Promise { + return requestClient.put(`/api/identity/roles/${id}/claims`, input); +} diff --git a/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue b/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue new file mode 100644 index 000000000..a41fde54c --- /dev/null +++ b/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue b/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue index 7a90bbd32..225013e46 100644 --- a/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue @@ -33,12 +33,16 @@ const MenuOutlined = createIconifyIcon('heroicons-outline:menu-alt-3'); const ClaimOutlined = createIconifyIcon('la:id-card-solid'); const PermissionsOutlined = createIconifyIcon('icon-park-outline:permissions'); const RoleModal = defineAsyncComponent(() => import('./RoleModal.vue')); +const ClaimModal = defineAsyncComponent(() => import('./RoleClaimModal.vue')); const abpStore = useAbpStore(); const { hasAccessByCodes } = useAccess(); const [RolePermissionModal, permissionModalApi] = useVbenModal({ connectedComponent: PermissionModal, }); +const [RoleClaimModal, claimModalApi] = useVbenModal({ + connectedComponent: ClaimModal, +}); const formOptions: VbenFormProps = { // 默认展开 @@ -134,6 +138,11 @@ const handleDelete = (row: IdentityRoleDto) => { const handleMenuClick = async (row: IdentityRoleDto, info: MenuInfo) => { switch (info.key) { + case 'claims': { + claimModalApi.setData(row); + claimModalApi.open(); + break; + } case 'permissions': { const roles = abpStore.application?.currentUser.roles ?? []; permissionModalApi.setData({ @@ -233,6 +242,7 @@ const handleMenuClick = async (row: IdentityRoleDto, info: MenuInfo) => { + diff --git a/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue b/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue index ec654fa32..758e31ebd 100644 --- a/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/users/UserTable.vue @@ -194,7 +194,6 @@ const handleUnlock = async (row: IdentityUserDto) => { const handleMenuClick = async (row: IdentityUserDto, info: MenuInfo) => { switch (info.key) { case 'claims': { - console.log(claimModalApi); claimModalApi.setData(row); claimModalApi.open(); break; From 8e6a823168ee53c52e8cd32aed75b067a78dede2 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 19 Dec 2024 17:54:07 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix(roles):=20=E4=BF=AE=E5=A4=8D=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E6=9D=83=E9=99=90=E5=B8=B8=E9=87=8F=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E9=94=99=E8=AF=AF.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/roles/RoleClaimModal.vue | 8 ++++---- .../identity/src/components/roles/RoleTable.vue | 16 ++++++++++------ .../@abp/identity/src/constants/permissions.ts | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue b/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue index a41fde54c..6fcc1c115 100644 --- a/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue +++ b/apps/vben5/packages/@abp/identity/src/components/roles/RoleClaimModal.vue @@ -17,7 +17,7 @@ import { getClaimsApi, updateClaimApi, } from '../../api/roles'; -import { IdentitRolePermissions } from '../../constants/permissions'; +import { IdentityRolePermissions } from '../../constants/permissions'; defineOptions({ name: 'RoleClaimModal', @@ -68,12 +68,12 @@ defineExpose({ diff --git a/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue b/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue index 225013e46..5e8a8d044 100644 --- a/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue +++ b/apps/vben5/packages/@abp/identity/src/components/roles/RoleTable.vue @@ -22,7 +22,7 @@ import { import { Button, Dropdown, Menu, Modal, Tag } from 'ant-design-vue'; import { deleteApi, getPagedListApi } from '../../api/roles'; -import { IdentitRolePermissions } from '../../constants/permissions'; +import { IdentityRolePermissions } from '../../constants/permissions'; defineOptions({ name: 'RoleTable', @@ -163,7 +163,7 @@ const handleMenuClick = async (row: IdentityRoleDto, info: MenuInfo) => {