58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import type { RouteLocationRaw } from 'vue-router'
|
|
import type { CurrentUser } from '../types/auth'
|
|
|
|
export const PRODUCT_PERMISSIONS = ['PRODUCT_VIEW', 'PRODUCT_EDIT', 'ASSET_UPLOAD']
|
|
export const ORDER_PERMISSIONS = ['ORDER_VIEW', 'ORDER_PROCESS', 'ORDER_COMPLETE']
|
|
export const STATISTICS_PERMISSIONS = ['STATISTICS_VIEW']
|
|
export const USER_MANAGE_PERMISSIONS = ['USER_MANAGE']
|
|
|
|
export const PERMISSION_OPTIONS = [
|
|
{ code: 'PRODUCT_VIEW', label: '商品查看', group: '商品' },
|
|
{ code: 'PRODUCT_EDIT', label: '商品编辑', group: '商品' },
|
|
{ code: 'ASSET_UPLOAD', label: '附件上传', group: '商品' },
|
|
{ code: 'ORDER_VIEW', label: '订单查看', group: '订单' },
|
|
{ code: 'ORDER_PROCESS', label: '订单处理', group: '订单' },
|
|
{ code: 'ORDER_COMPLETE', label: '订单完成', group: '订单' },
|
|
{ code: 'STATISTICS_VIEW', label: '统计查看', group: '统计' },
|
|
{ code: 'USER_MANAGE', label: '用户管理', group: '系统' },
|
|
] as const
|
|
|
|
export const PERMISSION_LABEL_MAP: Record<string, string> = Object.fromEntries(
|
|
PERMISSION_OPTIONS.map((option) => [option.code, option.label]),
|
|
)
|
|
|
|
export function hasAnyPermission(user: CurrentUser | null, permissions: string[]) {
|
|
if (!user) {
|
|
return false
|
|
}
|
|
|
|
if (user.userType === 'ADMIN') {
|
|
return true
|
|
}
|
|
|
|
return permissions.some((permission) => user.permissions.includes(permission))
|
|
}
|
|
|
|
export function hasPermission(user: CurrentUser | null, permission: string) {
|
|
return hasAnyPermission(user, [permission])
|
|
}
|
|
|
|
export function resolveHomeRoute(user: CurrentUser | null): RouteLocationRaw {
|
|
if (hasAnyPermission(user, PRODUCT_PERMISSIONS)) {
|
|
return { name: 'product-center', params: { categoryId: '1' } }
|
|
}
|
|
|
|
if (hasAnyPermission(user, ORDER_PERMISSIONS)) {
|
|
return { name: 'orders' }
|
|
}
|
|
|
|
if (hasAnyPermission(user, STATISTICS_PERMISSIONS)) {
|
|
return { name: 'statistics' }
|
|
}
|
|
|
|
if (hasAnyPermission(user, USER_MANAGE_PERMISSIONS)) {
|
|
return { name: 'users' }
|
|
}
|
|
|
|
return { name: 'login' }
|
|
} |