a
This commit is contained in:
30
src/hooks/auth.ts
Normal file
30
src/hooks/auth.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { judementSameArr } from '/@/utils/arrayOperation'
|
||||
|
||||
/**
|
||||
* 权限 composable:用于「无权限即无节点」场景(v-if + hasAuth),替代 v-auth
|
||||
* 多页面复用,保证响应式(权限变更后模板会更新)
|
||||
*
|
||||
* @example
|
||||
* const { hasAuth, hasAuths, hasAuthAll } = useAuth()
|
||||
* // 模板:v-if="hasAuth('xxx')" v-if="hasAuths(['a','b'])" v-if="hasAuthAll(['a','b'])"
|
||||
*/
|
||||
export function useAuth() {
|
||||
const { userInfos } = storeToRefs(useUserInfo())
|
||||
const list = () => userInfos.value?.authBtnList ?? []
|
||||
|
||||
/** 单个权限:有该权限返回 true */
|
||||
const hasAuth = (code: string) => list().includes(code)
|
||||
|
||||
/** 多个权限满足其一即返回 true */
|
||||
const hasAuths = (codes: string[]) => {
|
||||
const btnList = list()
|
||||
return codes.some((c) => btnList.includes(c))
|
||||
}
|
||||
|
||||
/** 多个权限全部满足才返回 true */
|
||||
const hasAuthAll = (codes: string[]) => judementSameArr(codes, list())
|
||||
|
||||
return { hasAuth, hasAuths, hasAuthAll }
|
||||
}
|
||||
Reference in New Issue
Block a user