| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import store from '@/store'
- import router from '@/router'
- /**
- * 字符权限校验
- * @param {Array} value 校验值
- * @returns {Boolean}
- */
- export function checkPermission(path) {
- // 确保路径以斜杠开头
- if (!path.startsWith('/')) path = '/' + path
-
- // 检查路由是否存在
- const route = router.resolve(path)
- if (!route || !route.route) {
- console.error(`路由不存在: ${path}`)
- return false
- }
-
- // 添加权限验证逻辑
- // ...
- return true
- }
- export function checkPermi(value) {
- if (value && value instanceof Array && value.length > 0) {
- const permissions = store.getters && store.getters.permissions
- const permissionDatas = value
- const all_permission = "*:*:*"
-
- const hasPermission = permissions.some(permission => {
- return all_permission === permission || permissionDatas.includes(permission)
- })
-
- if (!hasPermission) {
- return false
- }
- return true
- } else {
- console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`)
- return false
- }
- }
-
- /**
- * 角色权限校验
- * @param {Array} value 校验值
- * @returns {Boolean}
- */
- export function checkRole(value) {
- if (value && value instanceof Array && value.length > 0) {
- const roles = store.getters && store.getters.roles
- const permissionRoles = value
- const super_admin = "admin"
-
- const hasRole = roles.some(role => {
- return super_admin === role || permissionRoles.includes(role)
- })
-
- if (!hasRole) {
- return false
- }
- return true
- } else {
- console.error(`need roles! Like checkRole="['admin','editor']"`)
- return false
- }
- }
-
- // src/permission.js
- router.beforeEach(async(to, from, next) => {
- // 确保登录页面可访问
- if (to.path === '/login') {
- next()
- return
- }
-
- // 检查 token
- const token = store.getters.token
- if (!token) {
- next(`/login?redirect=${to.path}`)
- return
- }
-
- // 获取用户信息
- if (!store.getters.name) {
- try {
- await store.dispatch('user/getInfo')
- next()
- } catch (error) {
- await store.dispatch('user/resetToken')
- next(`/login?redirect=${to.path}`)
- }
- } else {
- next()
- }
- })
|