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.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
import { computed } from 'vue' ;
import { preferences , updatePreferences } from '@vben/preferences' ;
import { useAccessStore , useUserStore } from '@vben/stores' ;
function useAccess() {
const accessStore = useAccessStore ( ) ;
const userStore = useUserStore ( ) ;
const accessMode = computed ( ( ) = > {
return preferences . app . accessMode ;
} ) ;
/**
* 基于角色判断是否有权限
* @description: Determine whether there is permission, The role is judged by the user's role
* @param roles
*/
function hasAccessByRoles ( roles : string [ ] ) {
const userRoleSet = new Set ( userStore . userRoles ) ;
// 超管的角色
if ( userRoleSet . has ( 'superadmin' ) ) {
return true ;
}
const intersection = roles . filter ( ( item ) = > userRoleSet . has ( item ) ) ;
return intersection . length > 0 ;
}
/**
* 基于权限码判断是否有权限
* @description: Determine whether there is permission, The permission code is judged by the user's permission code
* @param codes
*/
function hasAccessByCodes ( codes : string [ ] ) {
const userCodesSet = new Set ( accessStore . accessCodes ) ;
/**
* 管理员权限
*/
if ( userCodesSet . has ( '*:*:*' ) ) {
return true ;
}
// 其他 判断是否存在
const intersection = codes . filter ( ( item ) = > userCodesSet . has ( item ) ) ;
return intersection . length > 0 ;
}
async function toggleAccessMode() {
updatePreferences ( {
app : {
accessMode :
preferences.app.accessMode === 'frontend' ? 'backend' : 'frontend' ,
} ,
} ) ;
}
return {
accessMode ,
hasAccessByCodes ,
hasAccessByRoles ,
toggleAccessMode ,
} ;
}
export { useAccess } ;