@@ -15,11 +15,20 @@ export async function hasAccess({
1515 const memoryUser = users . find ( ( user ) =>
1616 Object . keys ( memory [ domain ] ) . some (
1717 ( userReg ) =>
18+ // user matches this userReg
1819 ( userReg . startsWith ( "regex:" )
1920 ? new RegExp ( userReg . replace ( "regex:" , "" ) ) . test ( user )
2021 : userReg === user ) &&
21- new RegExp ( memory [ domain ] [ userReg ] . paths ) . test ( path )
22- )
22+ // role of user exists
23+ Object . hasOwn (
24+ memory [ domain ] . roles ,
25+ memory [ domain ] . users [ userReg ] . role ,
26+ ) &&
27+ // role has access to path
28+ new RegExp (
29+ memory [ domain ] . roles [ memory [ domain ] . users [ userReg ] . role ] . paths ,
30+ ) . test ( path ) ,
31+ ) ,
2332 ) ;
2433
2534 if ( memoryUser !== undefined ) {
@@ -40,27 +49,37 @@ export async function hasAccess({
4049 } [ ] ;
4150
4251 for ( const externalSource of externalSources . filter ( ( externalSource ) =>
43- new RegExp ( externalSource . restrictions . domains ) . test ( domain )
52+ new RegExp ( externalSource . restrictions . domains ) . test ( domain ) ,
4453 ) ) {
4554 const source = await getSource ( { id : `external:${ externalSource . source } ` } ) ;
4655 if ( source [ domain ] !== undefined ) {
4756 const externalUser = users . find ( ( user ) =>
4857 Object . keys ( source [ domain ] ) . some (
4958 ( userReg ) =>
59+ // user matches this userReg
5060 ( userReg . startsWith ( "regex:" )
5161 ? new RegExp ( userReg . replace ( "regex:" , "" ) ) . test ( user )
5262 : userReg === user ) &&
53- new RegExp ( source [ domain ] [ userReg ] . paths ) . test ( path ) &&
63+ // role of user exists
64+ Object . hasOwn (
65+ memory [ domain ] . roles ,
66+ memory [ domain ] . users [ userReg ] . role ,
67+ ) &&
68+ // role has access to path
69+ new RegExp (
70+ source [ domain ] . roles [ source [ domain ] . users [ userReg ] . role ] . paths ,
71+ ) . test ( path ) &&
72+ // there is no restriction applied to this domain that rejects this user or path
5473 ! externalSource . restrictions . domainSpecific
5574 . filter ( ( restriction ) =>
56- new RegExp ( restriction . domains ) . test ( domain )
75+ new RegExp ( restriction . domains ) . test ( domain ) ,
5776 )
5877 . some (
5978 ( restriction ) =>
6079 ! new RegExp ( restriction . users ) . test ( user ) ||
61- ! new RegExp ( restriction . paths ) . test ( path )
62- )
63- )
80+ ! new RegExp ( restriction . paths ) . test ( path ) ,
81+ ) ,
82+ ) ,
6483 ) ;
6584
6685 if ( externalUser !== undefined ) {
0 commit comments