fix(partner): skip unauthorized home APIs for sub-accounts
CI / verify (pull_request) Has been cancelled
CI / verify (pull_request) Has been cancelled
Gate dashboard/stores/orders by permission and move dashboard auth to method level so leaderboard stays open without toasting 403s. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -19,6 +19,33 @@ export function hasPartnerPermission(
|
||||
return account.permissions?.includes(permission) ?? false;
|
||||
}
|
||||
|
||||
export function hasAnyPartnerPermission(
|
||||
account: PartnerMe | null | undefined,
|
||||
permissions: PartnerPermissionKey[],
|
||||
): boolean {
|
||||
return permissions.some((p) => hasPartnerPermission(account, p));
|
||||
}
|
||||
|
||||
/** 与后端 GET /partner/dashboard 权限点一致 */
|
||||
export function canAccessPartnerDashboard(account: PartnerMe | null | undefined): boolean {
|
||||
return hasAnyPartnerPermission(account, [
|
||||
'store:create',
|
||||
'store:manage',
|
||||
'order:view',
|
||||
'warehouse:manage',
|
||||
]);
|
||||
}
|
||||
|
||||
/** 门店列表/拓店统计所需权限 */
|
||||
export function canAccessPartnerStores(account: PartnerMe | null | undefined): boolean {
|
||||
return hasAnyPartnerPermission(account, ['store:create', 'store:manage']);
|
||||
}
|
||||
|
||||
/** 与后端 GET /partner/orders 权限点一致 */
|
||||
export function canAccessPartnerOrders(account: PartnerMe | null | undefined): boolean {
|
||||
return hasAnyPartnerPermission(account, ['order:view', 'warehouse:manage']);
|
||||
}
|
||||
|
||||
/** 仓库管理员:warehouse:manage,或仅有 order:view(无门店权限) */
|
||||
export function isWarehouseStaff(account: PartnerMe | null | undefined): boolean {
|
||||
if (!account || isPrimaryAccount(account)) return false;
|
||||
|
||||
Reference in New Issue
Block a user