You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.3 KiB

6 years ago
import store from '@/store'
import {uppercaseFirst} from "@/filter"
import {isEmpty} from "@/util"
6 years ago
/**
* 判断是否需要鉴权需要则返回true
* 以下情况不需要鉴权①无meta②设置了noAuth=true③没有名称
*
* @param route vue-router的routeConfig或项目中说明的路由配置项
* @return {boolean}
*/
6 years ago
export function needAuth(route) {
if (route.path.startsWith('/redirect')) return false
const {meta} = route
return !meta || !meta.noAuth || isEmpty(meta.title) && isEmpty(meta.dynamicTitle)
6 years ago
}
/**
* 接口权限判断有权限则返回true
* 调用时需要保证用户已经登录成功
*
* @param path {string} 接口路径
* @return {boolean}
*/
6 years ago
export function auth(path) {
if (store.state.user.admin === true) return true
6 years ago
const resourceMap = store.state.resource.resourceMap
if (!(path in resourceMap)) return true
6 years ago
const resources = store.state.user.resources
6 years ago
return resources && path in resources
}
/**
* what i can
* 批量生成canXxx的计算属性
*
* @param apiMap <key:接口名称value:接口对象>
* @return {object}
*/
export function wic(apiMap) {
const attrs = {}
Object.entries(apiMap).forEach(([key, value]) => {
const attrKey = `can${uppercaseFirst(key)}`
attrs[attrKey] = () => auth(value.url)
})
return attrs
}