Salut,
je ne saisi pas tout.
Tu n'indiques qu'un droit : internet_manager ca correspond à quel droit
: le droit global ou celui de la délégation ?
Par défaut pour moi ownerEntities = l'entité du réseau.
Je vais essayer de poser complètement ma vision de ce matin :
2 droits :
- global_internet_manager : administrateur global des réseaux : peut
tout faire
- delegate_internet_manager : administrateur délégué : ne peut créer que
des sous-réseaux
Et le check serait uniquement : canUpdate
haveAccessToEntity($A->getEntityID()) // Accès à l'entité
&& (haveRight("global_internet_manager","w")) // je suis admin global de
l'entité
|| (haveRight("delegate_internet_manager","w") &&
$A->isUnderDelegateAuthorizedNetwork()) // Le réseau est sous un réseau
délégué et j'ai le droit de délégation
)
Avec isUnderDelegateAuthorizedNetwork() qui va checker sur la suite des
parents getAncestors('glpi_networks') qu'il existe un réseau délégué
dans les entités du profile actif (pas les entités actives attention).
La gestion sur le profile complet permet la sous-délégation. Exemple :
// Récupération des entités du profil actif : Il y aurait moyen de
factoriser avec la changeEntities
$entities = array();
foreach ($_SESSION['glpiactiveprofile']['entities'] as $key => $val) {
$entities[$val['id']] = $val['id'];
if ($val['is_recursive']) {
$sons= getSonsOf("glpi_entities", $val['id']);
if (count($sons)) {
foreach ($sonsas $key2 => $val2) {
$entities[$key2] = $key2;
}
}
}
}
// récupération des ancêtres du réseau courant
$ancestors = getAncestors('glpi_networks', $A->getID());
// Check si un des ancêtres
if (count($ancestors)) {
$network= new Network();
foreach ($ancestors as $networks_id) {
if ($network->getFromDB($networks_id)) {
if ($network->getField('delegate') == 1 &&
in_array($network->getEntitiesID(), $entities) {
return true;
}
}
}
}
// Retour false si aucun trouvé
return false;
Voilà c'est lourd comme checks mais nécessaires.
J'espère que d'avoir écrit les choses rend plus clair ce que je voulais
dire ce matin.
++
Julien
Le 29/07/2011 19:20, Damien Touraine a écrit :
Bonjour,
Suite à ce la réunion de ce matin, je me suis rendu compte qu'il
manquait quelque chose en plus du champs "delegation". En effet, il
faut que nous soyons capable de savoir qui a le droit de changer ce
champs ainsi que les bornes du réseau. En effet, ce ne peut être les
"internet_manager" (proposition de nom pour le module lié au
"haveRight") de l'entitée du réseau, car, sinon, ils pourraient
changer leur propre droit. Je pensais que nous pourrions nous en
sortir en restreignant sur la base des profiles, mais, j'ai peur que
cette information ne soit pas "générique" pour l'entitée et ne dépende
du réseau.
Je propose d'ajouter un champs supplémentaire "ownerEntities" qui
contiendrait l'identifiant de l'entitée qui a le droit de changer ce
paramêtre, ainsi que les bornes du réseau. Ce serait, en quelque sorte
le champs contenant le "déléguant". La valeur par défaut serait
l'entitée la plus élevée du profile en cours. Bien évidemment, lors de
la modification du réseau en question, les membres de "ownerEntities"
auront le droit de modifier ce paramètre.
Pour résumer ce que je proposes :
Nous pouvons modifier (Tout changer, y compris ses bornes et le champs
ownerEntities) le réseau A si (méthode canUpdateBoundaries):
haveRight("internet_manager","w") &&
haveAccessToEntity($A->getField("ownerEntities"))
Nous pouvons créer un sous réseau de A si :
$A->canUpdateBoundaries() || (
haveRight("internet_manager","w") &&
haveAccessToEntity($A->getEntityID()) && ($A->getField("delegation") = 1)
)
Nous pouvons créer une adresse IP dans A si :
haveRight("internet_manager","r") &&
haveAccessToEntity($A->getEntityID())
Si nous souhaitons être encore plus générique nous pourrions définir
non pas une entitée propriétaire, mais plusieurs. Ma question est donc
: existe-t'il une "dropdown" permettant de choisir plusieurs valeurs ?
Par ailleurs, pourquoi ne pas utiliser un champs similaire pour les
entités déléguées à la création de sous réseau. Nous pourrions, ainsi,
avoir un droit plus fin que le droit récursif.
Bien évidemment, les tests ci-dessus seraient adaptés en conséquences.
Cordialement
Damien Touraine
_______________________________________________
Glpi-dev mailing list
Glpi-dev@gna.org
https://mail.gna.org/listinfo/glpi-dev