11import useStore from '@/stores'
2- import { Role , Permission , ComplexPermission } from '@/utils/permission/type'
2+ import {
3+ Role ,
4+ Permission ,
5+ ComplexPermission ,
6+ Edition ,
7+ type PF ,
8+ type CPF ,
9+ type CRF ,
10+ } from '@/utils/permission/type'
311import { isFunction } from '@/utils/common'
412
5- type PF = ( ) => Role | string | Permission | ComplexPermission
613/**
714 * 是否包含当前权限
815 * @param permission 当前权限
916 * @returns True 包含 false 不包含
1017 */
11- const hasPermissionChild = ( permission : Role | string | Permission | ComplexPermission | PF ) => {
18+ const hasPermissionChild = (
19+ permission : Role | string | Permission | ComplexPermission | Edition | PF ,
20+ ) => {
1221 const { user } = useStore ( )
1322 const permissions = user . getPermissions ( )
1423 const role : Array < string > = user . getRole ( )
24+ const edition = user . getEdition ( )
1525 if ( ! permission ) {
1626 return true
1727 }
18-
1928 if ( isFunction ( permission ) ) {
2029 permission = ( permission as PF ) ( )
2130 }
@@ -25,10 +34,22 @@ const hasPermissionChild = (permission: Role | string | Permission | ComplexPerm
2534 if ( permission instanceof Permission ) {
2635 return permissions . includes ( permission . permission )
2736 }
37+ if ( permission instanceof Edition ) {
38+ return permission . edition === edition
39+ }
2840 if ( permission instanceof ComplexPermission ) {
29- const permissionOk = permission . permissionList . some ( ( p ) => permissions . includes ( p ) )
30- const roleOk = role . some ( ( r ) => permission . roleList . includes ( r ) )
31- return permission . compare === 'AND' ? permissionOk && roleOk : permissionOk || roleOk
41+ const permissionOk = permission . permissionList . some ( ( p ) =>
42+ permissions . includes ( isFunction ( p ) ? ( p as CPF ) ( ) . toString ( ) : p . toString ( ) ) ,
43+ )
44+ const roleList = permission . roleList
45+ const roleOk = roleList . some ( ( r ) =>
46+ role . includes ( isFunction ( r ) ? ( r as CRF ) ( ) . toString ( ) : r . toString ( ) ) ,
47+ )
48+ const editionOK = permission . editionList . includes ( edition . toString ( ) )
49+
50+ return permission . compare === 'AND'
51+ ? permissionOk && roleOk && editionOK
52+ : ( permissionOk || roleOk ) && editionOK
3253 }
3354 if ( typeof permission === 'string' ) {
3455 return permissions . includes ( permission )
@@ -45,10 +66,11 @@ const hasPermissionChild = (permission: Role | string | Permission | ComplexPerm
4566 */
4667export const hasPermission = (
4768 permission :
48- | Array < Role | string | Permission | ComplexPermission | PF >
69+ | Array < Role | string | Permission | ComplexPermission | Edition | PF >
4970 | Role
5071 | string
5172 | Permission
73+ | Edition
5274 | ComplexPermission
5375 | PF ,
5476 compare : 'OR' | 'AND' ,
0 commit comments