diff --git a/src/api/PermissionAPI.ts b/src/api/PermissionAPI.ts index 0ab7486..091e4ae 100644 --- a/src/api/PermissionAPI.ts +++ b/src/api/PermissionAPI.ts @@ -1,5 +1,5 @@ import { axios } from "./BaseAPI"; -import type { Page, PageResult, Permission, PermissionPayload } from "../types"; +import type { ModuleCode, Page, PageResult, Permission, PermissionPayload } from "../types"; const BASE_URI = "/user/permission"; @@ -21,9 +21,17 @@ async function remove(id: string): Promise { }); } +/** 查询当前登录用户在指定模块内可转授的权限。 */ +async function grantableList(moduleCode: ModuleCode): Promise { + return await axios.post(`${BASE_URI}/grantable/list`, undefined, { + params: { moduleCode } + }); +} + export default { list, create, update, - remove + remove, + grantableList }; diff --git a/src/api/RoleAPI.ts b/src/api/RoleAPI.ts index 5d7e667..f50d314 100644 --- a/src/api/RoleAPI.ts +++ b/src/api/RoleAPI.ts @@ -27,6 +27,65 @@ async function remove(id: string): Promise { }); } +/** 查询当前登录用户在模块内可管理的角色。 */ +async function manageableList(moduleCode: ModuleCode): Promise { + return await axios.post(`${BASE_URI}/manageable/list`, undefined, { + params: { moduleCode } + }); +} + +/** 查询当前登录用户在模块内可授权给账号的角色。 */ +async function grantableList(moduleCode: ModuleCode): Promise { + return await axios.post(`${BASE_URI}/grantable/list`, undefined, { + params: { moduleCode } + }); +} + +/** 查询当前登录用户直属角色详情,不按可管理范围过滤。 */ +async function currentDetailList(moduleCode?: ModuleCode): Promise { + return await axios.post(`${BASE_URI}/current/detail/list`, undefined, { + params: { moduleCode } + }); +} + +/** 查询当前登录用户可以给目标角色配置的直接权限 P 候选项。 */ +async function grantablePermissionList(roleId: string): Promise { + return await axios.post(`${BASE_URI}/permission/grantable/list`, undefined, { + params: { roleId } + }); +} + +/** 查询目标角色当前可继续转授的权限 D。 */ +async function delegationList(roleId: string): Promise { + return await axios.post(`${BASE_URI}/delegation/list`, undefined, { + params: { roleId } + }); +} + +/** 查询当前登录用户可以给目标角色配置的 D 候选项。 */ +async function grantableDelegationList(roleId: string): Promise { + return await axios.post(`${BASE_URI}/delegation/grantable/list`, undefined, { + params: { roleId } + }); +} + +/** 覆盖保存目标角色可继续转授的权限 D。 */ +async function updateDelegation(req: Pick): Promise { + await axios.post(`${BASE_URI}/delegation/update`, req); +} + +/** 查询目标角色可选管理父级。 */ +async function parentGrantableList(roleId: string): Promise { + return await axios.post(`${BASE_URI}/parent/grantable/list`, undefined, { + params: { roleId } + }); +} + +/** 保存目标角色管理父级。 */ +async function updateParent(req: Pick): Promise { + await axios.post(`${BASE_URI}/parent/update`, req); +} + async function authorizedList(userId: string, moduleCode?: ModuleCode): Promise { return axios.post(`${BASE_URI}/authorized/list`, undefined, { params: { @@ -52,6 +111,15 @@ export default { create, update, remove, + manageableList, + grantableList, + currentDetailList, + grantablePermissionList, + delegationList, + grantableDelegationList, + updateDelegation, + parentGrantableList, + updateParent, authorizedList, authorize, authorizedPermission diff --git a/src/types/Permission.ts b/src/types/Permission.ts index fc12fa6..06de198 100644 --- a/src/types/Permission.ts +++ b/src/types/Permission.ts @@ -7,11 +7,18 @@ export interface Permission { nameLangId?: string; name?: string; description?: string; + builtin?: boolean; + protectedPermission?: boolean; + ownerType?: AuthOwnerType; + ownerId?: string; + createdBy?: string; createdAt?: number; updatedAt?: number; deletedAt?: number; } +export type AuthOwnerType = "SYSTEM" | "MODULE" | "TENANT" | "STORE" | "USER"; + export type PermissionPayload = Pick & { id?: string; }; diff --git a/src/types/Role.ts b/src/types/Role.ts index 690f226..208c6cf 100644 --- a/src/types/Role.ts +++ b/src/types/Role.ts @@ -1,4 +1,4 @@ -import type { ModuleCode, Permission } from "./Permission"; +import type { AuthOwnerType, ModuleCode, Permission } from "./Permission"; import { Model } from "./Model"; export type Role = { @@ -7,18 +7,31 @@ export type Role = { nameLangId?: string; name?: string; description?: string; + builtin?: boolean; + protectedRole?: boolean; + parentRoleId?: string; + ownerType?: AuthOwnerType; + ownerId?: string; + createdBy?: string; permissionList?: Permission[]; allPermissionList?: Permission[]; childRoleList?: Role[]; + parentRole?: Role; + delegationPermissionList?: Permission[]; permissionIdList?: string[]; childRoleIdList?: string[]; + delegationPermissionIdList?: string[]; } & Model; -export type RolePayload = Pick & { +export type RolePayload = Partial> & { id?: string; + parentRoleId?: string; + ownerType?: AuthOwnerType; + ownerId?: string; permissionIdList?: string[]; childRoleIdList?: string[]; + delegationPermissionIdList?: string[]; }; export interface AuthorizeUserRole {