Hey Leute,
gibt es eine Option, die versteckten Nutzerdaten, welche normalerweise für Niemanden ersichtlich sind, für Mitglieder der gleichen Rolle darstellbar zu machen?
Hintergrund ist, dass Personen ihre persönlichen Daten der kompletten Community nicht zugänglich machen wollen; dennoch Listen für Mitglieder der gleichen Rolle (Mannschaftslisten) komplett generiert werden müssen.
Vielen Dank,
OKraftDD
Ansicht versteckter Nutzerdaten f. Mtglieder gleicher Gruppe
Ich habe jetzt selber eine Lösung dazu entwickelt. Diese ist leider etwas rudimentär und für meine Zwecke angepasst, funktioniert aber für die Version 2.1.7. Allerdings, denke ich, ist der Ansatz durchaus fürs nächste Release nutzbar, deswegen hier folgender Code:
adm_program/system/classes/user.php - ab Zeile 558 - nach function editProfile()
adm_program/modules/profile/profile.php
adm_program/modules/lists/lists_show.php
Wohin genau zu posten ist, um es offiziell mit ins nächste Release zu nehmen, weiß ich nicht. Deswegen dieser Weg.
Es funktioniert nun, dass alle Mitglieder, welche sich in der selben Gruppe (Rolle) befinden, die kompletten Profile (also, auch die versteckten Felder) sehen können, aber NUR, wenn diese Rolle von der eingeloggten Person auch gelistet werden darf.
Meine Rollenaufteilung sieht verkürzt in etwa so aus:
Ausgangslage: Ich bin Mitglied der 1. Herrenmannschaft (also auch automatisch "Herren" und "Mitglied")
Sehe ich das Profil eines Mitgliedes ein, welches nicht in der 1. Herrenmannschaft (bsp. 1. Damenmannschaft) ist, sehe ich ausschließlich die öffentlichen Felder.
Nun sind allerdings beide in der selben Gruppe "Mitglieder". Da ich aber die Mitglieder nicht auflisten darf, wird mir nicht gewährt die Details anzusehen.
Sehe ich ein Profil eines Mitspielers der 1. Herrenmannschaft ein, dann sehe ich auch die versteckten Felder.
Um daraus ein Feature für das neues Release zu entwickeln fehlen noch ein paar Kleinigkeiten:
- Flag in der Datenbank
- Setzen der Flag über "Rollenmanagement"
- Prüfen der Flag in der neuen Funktion "inSameGroup($profileID = NULL, $groupID = NULL)"
MfG OKraftDD
adm_program/system/classes/user.php - ab Zeile 558 - nach function editProfile()
Code: Alles auswählen
// OLKR
// Funktion prueft, ob der angemeldete User mindestens eine gemeinsame Gruppe hat mit entsprechendem Profil
function inSameGroup($profileID = NULL, $groupID = NULL)
{
global $g_current_organization;
$inSameGroup = false;
if($profileID == NULL)
{
$this->getValue('usr_id');
}
//wenn g_current_user alle Gruppen listen darf
if ($this->checkRolesRight("rol_all_lists_view")) {
$inSameGroup = true;
}
$gruppen_loggedin_user = $gruppen_search_user = array();
/* Gruppen des eingeloggten Nutzers */
// Alle Gruppen des aktuell eingeloggten Users in ein Array legen
$sql = 'SELECT *
FROM '. TBL_CATEGORIES. ', '. TBL_ROLES. '
LEFT JOIN '. TBL_MEMBERS. '
ON mem_usr_id = '. $this->getValue('usr_id'). '
AND mem_rol_id = rol_id
AND mem_begin <= "'.DATE_NOW.'"
AND mem_end > "'.DATE_NOW.'"
WHERE rol_valid = 1 ' .
//nur gruppen zählen, welche gelistet werden dürfen
'AND (rol_this_list_view = 1 OR rol_this_list_view = 2)' .
'AND rol_cat_id = cat_id
AND cat_org_id = '. $g_current_organization->getValue('org_id');
$this->db->query($sql);
//echo "<br/>---";
$i = 0;
//für alle Gruppen, welche gültig sind und gelistet werden dürfen
while($row = $this->db->fetch_array())
{
//echo "<br/>eingeloggter User: " . $row['rol_id'] . " (" . $row['rol_name'] . ")";
if($row['mem_usr_id'] > 0)
{
//echo "<--";
$i++;
$gruppen_loggedin_user[$i] = $row['rol_id'];
}
}
/* Gruppen des angesehenen Nutzers */
//echo "<br/>ProfilID: " . $profileID;
//wenn Gruppe übermittelt, dann braucht nur diese Gruppe überprüft werden
if ($groupID != NULL)
{
//wenn die übermittelte Gruppe auch in den Gruppen des eingeloggten Nutzers ist
if (array_search($groupID, $gruppen_loggedin_user))
{
$inSameGroup = true;
}
} else {
//ansonsten sämtliche Gruppen des anzusehenden Nutzers heraussuchen
$sql = 'SELECT *
FROM '. TBL_CATEGORIES. ', '. TBL_ROLES. '
LEFT JOIN '. TBL_MEMBERS. '
ON mem_usr_id = '. $profileID. '
AND mem_rol_id = rol_id
AND mem_begin <= "'.DATE_NOW.'"
AND mem_end > "'.DATE_NOW.'"
WHERE rol_valid = 1 ' .
//nur gruppen zählen, welche gelistet werden dürfen
'AND (rol_this_list_view = 1 OR rol_this_list_view = 2)' .
'AND rol_cat_id = cat_id
AND cat_org_id = '. $g_current_organization->getValue('org_id');
$this->db->query($sql);
$i = 0;
while($row = $this->db->fetch_array())
{
//echo "<br/>angesehener User: " . $row['rol_id'] . " (" . $row['rol_name'] . ")";
if($row['mem_usr_id'] > 0)
{
//echo "<--";
$i++;
$gruppen_search_user[$i] = $row['rol_id'];
//wenn Gruppe in anzuhendem Profil in Array des eingeloggten Nutzers vorhanden ist
if (array_search($row['rol_id'], $gruppen_loggedin_user))
{
$inSameGroup = true;
}
}
}
}
return $inSameGroup;
}
Code: Alles auswählen
Zeile 53 alt:
--------------
if($g_current_user->editProfile($user_id) == false && $field->getValue('usf_hidden') == 1)
Zeile 53 NEU:
-------------
if(!$g_current_user->inSameGroup($user_id) && $g_current_user->editProfile($user_id) == false && $field->getValue('usf_hidden') == 1)
---
Zeile 271 alt:
--------------
&& ($g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Geschlecht', 'usf_hidden') == 0 ))
Zeile 271 NEU:
--------------
&& ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Geschlecht', 'usf_hidden') == 0 ))
---
Zeile 331 alt:
--------------
&& ( $g_current_user->editProfile($a_user_id) == true || $field->getValue('usf_hidden') == 0 ))
Zeile 331 NEU:
--------------
&& ( $g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $field->getValue('usf_hidden') == 0 ))
---
Zeile 362 alt:
--------------
&& ( $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Adresse', 'usf_hidden') == 0))
Zeile 362 NEU:
--------------
&& ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Adresse', 'usf_hidden') == 0))
---
Zeile 370 alt:
--------------
&& ($g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('PLZ', 'usf_hidden') == 0))
Zeile 370 NEU:
--------------
&& ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('PLZ', 'usf_hidden') == 0))
---
Zeile 378 alt:
--------------
&& ($g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Ort', 'usf_hidden') == 0))
Zeile 378 NEU:
--------------
&& ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Ort', 'usf_hidden') == 0))
---
Zeile 386 alt:
--------------
&& ($g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Land', 'usf_hidden') == 0))
Zeile 386 NEU:
--------------
&& ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Land', 'usf_hidden') == 0))
---
Zeile 483 alt:
--------------
|| ($g_current_user->editProfile($a_user_id) == false && $field->getValue('usf_hidden') == 0 )))
Zeile 483 NEU:
--------------
|| ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == false && $field->getValue('usf_hidden') == 0 )))
Code: Alles auswählen
Zeile 381 ff. alt:
------------------
// versteckte Felder duerfen nur von Leuten mit entsprechenden Rechten gesehen werden
if($usf_id == 0
|| $g_current_user->editUsers()
|| $g_current_user->getPropertyById($usf_id, 'usf_hidden') == 0)
Zeile 381 ff. NEU:
------------------
// versteckte Felder duerfen nur von Leuten mit entsprechenden Rechten gesehen werden
if($usf_id == 0
|| $g_current_user->editUsers()
|| $g_current_user->getPropertyById($usf_id, 'usf_hidden') == 0
// OLKR
|| $g_current_user->inSameGroup(NULL, $req_rol_id)
)
---
Zeile 495 ff. alt:
------------------
// versteckte Felder duerfen nur von Leuten mit entsprechenden Rechten gesehen werden
if($usf_id == 0
|| $g_current_user->editUsers()
|| $g_current_user->getPropertyById($usf_id, 'usf_hidden') == 0)
Zeile 495 ff. NEU:
------------------
// versteckte Felder duerfen nur von Leuten mit entsprechenden Rechten gesehen werden
if($usf_id == 0
|| $g_current_user->editUsers()
|| $g_current_user->getPropertyById($usf_id, 'usf_hidden') == 0
// OLKR
|| $g_current_user->inSameGroup(NULL, $req_rol_id)
)
Es funktioniert nun, dass alle Mitglieder, welche sich in der selben Gruppe (Rolle) befinden, die kompletten Profile (also, auch die versteckten Felder) sehen können, aber NUR, wenn diese Rolle von der eingeloggten Person auch gelistet werden darf.
Meine Rollenaufteilung sieht verkürzt in etwa so aus:
Code: Alles auswählen
Alle Mitglieder (Liste darf NICHT erstellt werden)
+ Damen (Liste darf NICHT erstellt werden)
| | 1. Damenmannschaft (Liste darf NICHT erstellt werden)
| | 2. Damenmannschaft (Liste darf NICHT erstellt werden)
+ Herren (Liste darf NICHT erstellt werden)
| | 1. Herrenmannschaft (Liste darf NICHT erstellt werden)
| | 2. Herrenmannschaft (Liste darf NICHT erstellt werden)
Sehe ich das Profil eines Mitgliedes ein, welches nicht in der 1. Herrenmannschaft (bsp. 1. Damenmannschaft) ist, sehe ich ausschließlich die öffentlichen Felder.
Nun sind allerdings beide in der selben Gruppe "Mitglieder". Da ich aber die Mitglieder nicht auflisten darf, wird mir nicht gewährt die Details anzusehen.
Sehe ich ein Profil eines Mitspielers der 1. Herrenmannschaft ein, dann sehe ich auch die versteckten Felder.
Um daraus ein Feature für das neues Release zu entwickeln fehlen noch ein paar Kleinigkeiten:
- Flag in der Datenbank
- Setzen der Flag über "Rollenmanagement"
- Prüfen der Flag in der neuen Funktion "inSameGroup($profileID = NULL, $groupID = NULL)"
MfG OKraftDD