|
Verfasst am: 22. 06. 2010 [20:17]
|
|
DerFredster
Themenersteller
Dabei seit: 01.04.2008
Beiträge: 37
|
Hallo zusammen,
habe ein Problem und komme nicht wirklich weiter. Vielleicht gibts ja jemanden der schon mal sowas gelöst hat.
Folgendes Setup:
- T3 Installation mit mehreren Redakteuren welche die gleichen Logins verwalten
- Redakteur A hat Zugriff auf Nutzergruppe A aber nicht auf Nutzergruppe B
- Redakteur B hat Zugriff auf Nutzergruppe B aber nicht auf Nutzergruppe A
- Sowohl Redakteur A als auch Redakteur B haben Zugriff auf Nutzer N
Problem:
Nutzer N hat Nutzergruppe A bereits. Jetzt kommt Redakteur B und vergibt Nutzer N die Nutzergruppe B. Sobald Redakteur B speichert (er sieht die Gruppe A die Nutzer N bereits hat ja nicht in der Flexform) verliert N Gruppe A.
D.h. TYPO3 speichert immer nur die Gruppe die der Nutzer vergeben hat und nicht zusätzlich bereits vergebene, für den Redakteur aber nicht sichtbare Gruppen. 
Ansatz:
- habe bereits erfolglos probiert den Redakteuren jeweils Leserechte auf die jeweils andere Gruppe, welche in anderen Sysfoldern liegen, zu geben
Hat vielleicht jemand eine Idee?
Danke im voraus.
Federico
|
|
Verfasst am: 23. 06. 2010 [14:54]
|
|
DerFredster
Themenersteller
Dabei seit: 01.04.2008
Beiträge: 37
|
ok,
habe das Ganze jetzt erstmal direkt in den Sourcen gelöst. Könnte man evtl. via Hook besser und eleganter lösen... war aber wie immer dringend und funktioniert
Hier mein Snippet welches ich in Zeile 878 der class.t3lib_tcemain.php eingefügt habe:
if($table == "fe_users" && !($this->BE_USER->isAdmin())) {
// Get the current usergroup setting
$KK_res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('usergroup', 'fe_users', 'uid='.intval($id));
while ($KK_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($KK_res)) {
$KK_currentRecord = $KK_row['usergroup'];
}
$GLOBALS['TYPO3_DB']->sql_free_result($KK_res);
// Check if the user has access to the current record and discard all those where the user has access
$KK_currentRecordArray = explode(',', $KK_currentRecord);
foreach ($KK_currentRecordArray as $KK_key => $KK_value) {
// Get the current usergroup pid
$KK_pid_res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('pid', 'fe_groups', 'uid='.intval($KK_value));
while ($KK_pid_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($KK_pid_res)) {
$KK_pid_to_check = $KK_pid_row['pid'];
}
$GLOBALS['TYPO3_DB']->sql_free_result($KK_pid_res);
// If the user has access to the pid where the usergroup is stored we can remove it
if($this->BE_USER->isInWebMount($KK_pid_to_check)) {
unset($KK_currentRecordArray[$KK_key]);
}
}
// join the groups to keep and the new ones
if($KK_currentRecordArray) {
$KK_keepGroups = implode(",", $KK_currentRecordArray);
if($fieldArray['usergroup'] == '') {
$fieldArray['usergroup'] = $KK_keepGroups;
} else {
$fieldArray['usergroup'] = $fieldArray['usergroup'] . ',' . $KK_keepGroups;
}
}
}
|