Le 26.01.2007 19:52, Laurent Destailleur (Eldy) a ecrit :
Franky Van Liedekerke a écrit :
On Fri, 26 Jan 2007 16:59:41 +0100 (CET)
Régis Houssin <address@hidden> wrote:
j'ai ajouté ceci en test sur /comm/propal.php afin de sécuriser
l'accès aux fiches propal envers les commerciaux qui sont restreint
au niveau visualisation des sociétés, est-ce que ca convient ? si oui
on le reporte sur les factures et autres :
// Protection restriction commercial
if (!$user->rights->commercial->client->voir)
{
$sql = "SELECT sc.fk_soc";
$sql .= " FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql .= " WHERE sc.fk_soc = ".$propal->socid." AND sc.fk_user =
".$user->id;
if ( $db->query($sql) )
{
if ( $db->num_rows() == 0) accessforbidden();
}
}
//fin de Protection restriction commercial
On y ait presque mais ce code empêche un utilisateur externe de voir ces
propres propal.
J'ai donc apporté une modification et j'ai réessayé les tests dans les 4
combinaisons possibles et la règle suivante est bien respectée:
Utilisateur interne socid=0 + Droits voir tous clients => Voit
toute société
Utilisateur interne socid=0 + Pas de droits voir tous clients => Ne voit
que les sociétés où il est liée comme commercial
Utilisateur externe socid=x + Droits voir tous clients => Ne voit
que lui meme
Utilisateur externe socid=x + Pas de droits voir tous clients => Ne voit
que lui meme
Je te laisse regarder Régis et si ok, on l'applique aux autres entités.
Par contre pour des raisons de lisibilité je remplacerais le code sql
par une méthode sur l'objet user
if (! $user->isCommercialOf($propal->socid)) access_forbidden();
Cela simplifiera aussi la recopie du code dans les autres entités.
Je pensais à déplacer aussi ces vérifications de permissions, pourquoi
ne pas plutôt mettre cela dans l'objet qui est demandé par l'utilisateur ?
Quand on fait un Propale::Fetch par exemple on passe l'utilisateur
courant et on vérifie avant de retourner les données ?