权限管理,没有页面修改之前版本
This commit is contained in:
49
inventory-web/src/stores/permission.ts
Normal file
49
inventory-web/src/stores/permission.ts
Normal file
@ -0,0 +1,49 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref } from 'vue'
|
||||
import request from '@/utils/request'
|
||||
|
||||
export const usePermissionStore = defineStore('permission', () => {
|
||||
// 存储我能看到的页面代码 (如 ['inbound_buy', ...])
|
||||
const menuPermissions = ref<string[]>([])
|
||||
|
||||
// 存储我能看到的列代码 (如 ['unit_price', 'sale_price'])
|
||||
const elementPermissions = ref<string[]>([])
|
||||
|
||||
// 初始化加载权限 (登录后调用)
|
||||
const loadPermissions = async () => {
|
||||
try {
|
||||
const res: any = await request({
|
||||
url: '/v1/auth/my-permissions',
|
||||
method: 'get'
|
||||
})
|
||||
if (res.code === 200 && res.data) {
|
||||
menuPermissions.value = res.data.menus || []
|
||||
elementPermissions.value = res.data.elements || []
|
||||
console.log('权限字典加载完成:', elementPermissions.value.length, '个列权限')
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('加载权限失败', e)
|
||||
// 失败时清空,防止残留
|
||||
menuPermissions.value = []
|
||||
elementPermissions.value = []
|
||||
}
|
||||
}
|
||||
|
||||
// ★ 核心判断函数:判断当前用户是否拥有某个列/按钮的权限
|
||||
// page: 页面代码 (预留字段,目前全局唯一code,暂不使用page隔离)
|
||||
// code: 权限标识 (如 'unit_price')
|
||||
const hasColumnPermission = (page: string, code: string) => {
|
||||
// 1. 如果列没有配置 permissionKey,说明是公开列,直接放行
|
||||
if (!code) return true
|
||||
|
||||
// 2. 检查权限池里是否有这个 code
|
||||
return elementPermissions.value.includes(code)
|
||||
}
|
||||
|
||||
return {
|
||||
menuPermissions,
|
||||
elementPermissions,
|
||||
loadPermissions,
|
||||
hasColumnPermission
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user