[TYPO3-core] Problem regarding crawler, indexed_search and fe_groups access to search results
Luc Muller
l.nospam.muller at ameos.com
Wed Oct 8 10:44:52 CEST 2014
Hello Everybody.
I have a little question / problem regarding crawler and indexed_search
and usergroups access.
Short : When a user has a different fe_groups configuration than the one
configured when crawling he can't get search results in indexed search
even if he is part of the fe_group configured for crawling.
Well here's a detailed case.
let's say we have 2 fe_groups in the website
uid 10 : Basic FrontedUser
uid 20 : Communication
My crawler config says :
Crawl with FE usergroups : 10
Thus resulting in having the table 'index_grlist' filled with 0,-2,10 in
the field gr_list.
let's now assume we have two fe_users :
user_one has fe_groups : 10
user_two has fe_groups : 10,20
Then when performing a search in indexed_search a check is made to
verify that we can have access to the found results.
that's going on in the file :
typo3/sysext/indexed_search/Classes/Controller/SearchFormController.php
the check is made in 2 times in the function checkResume at line 1199
at line 1225 we have : if ((string)$row['gr_list'] !==
(string)$GLOBALS['TSFE']->gr_list) {
thus meaning that a check is made if the TSFE->gr_list match exactly the
gr_list of indexed data
in case of user_one we have $GLOBALS['TSFE']->gr_list = 0,-2,10
=> EXACT MATCH : display the results
in case of user_two we have $GLOBALS['TSFE']->gr_list = 0,-2,10,20
=> NO MATCH continue the code
Then we arrive at line 1228 where we find this query performed to check
if the user can have access to the found results
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('phash', 'index_grlist',
'phash=' . (int)$row['phash'] . ' AND gr_list=' .
$GLOBALS['TYPO3_DB']->fullQuoteStr($GLOBALS['TSFE']->gr_list,
'index_grlist'));
and this part of the query make an exact match of the gr_list in the
data with the gr_list of TSFE
AND gr_list=' .
$GLOBALS['TYPO3_DB']->fullQuoteStr($GLOBALS['TSFE']->gr_list,
'index_grlist')
so in case of my 'user_two' this part of the query would look like : AND
gr_list='0,-2,10,20'
this wont match de gr_list in index_grlist and my user won't access the
the search results even if he belongs to a usergroup that is configured
to be crawled.
So, is anyone kind enough to explain me where I am missing anything ?
Or is there such a bug ?
In my opinion the gr_list field index_grlist table should only contain
the fe_groups configured for crawling the pages with crawler. On the
other side, indexed search should perform a check if he can match one of
the ids of $GLOBALS['TSFE']->gr_list in the field gr_list of the table
index_grlist.
Thanks a lot for you support on this point
Cheers,
Luc Muller
More information about the TYPO3-team-core
mailing list