13.6.3.5 Doc::hasPermission()

Cette méthode permet de vérifier que l'utilisateur courant possède un droit particulier sur le document.

13.6.3.5.1 Description

bool hasPermission ( string $aclName, 
                       bool $strict = false )

Cette méthode retourne true, si l'utilisateur possède le droit indiqué. Ce droit est indiqué dans le profil du document et peut être obtenu par un rôle ou un groupe.

13.6.3.5.1.1 Avertissements

Aucun.

13.6.3.5.2 Liste des paramètres

(string) aclName
Nom du droit a examiner.
(bool) strict

Indique s'il faut tenir compte de la suppléance :

  • Si false (par défaut) : les droits des titulaires sont aussi pris en compte
  • Si true : les droits des titulaires ne sont pas pris en compte.

13.6.3.5.3 Valeur de retour

Retourne true dans les cas suivants :

  • si l'utilisateur possède le droit demandé,
  • si l'utilisateur est "admin" (même si le droit n'existe pas).

Retourne false dans les cas suivants :

  • si l'utilisateur ne possède pas le droit demandé (hors "admin"),
  • si le droit n'est pas un des droits du document (hors "admin").

13.6.3.5.4 Erreurs / Exceptions

Aucune.

13.6.3.5.5 Historique

Cette méthode n'est disponible que depuis la version 3.2.5.

La méthode Doc::control() disponible dans les versions précédentes permet de réaliser le même test de droit. À la différence de Doc::hasPermission(), cette dernière retourne un message d'erreur si le droit n'est pas obtenu sinon elle retourne un message vide.

13.6.3.5.6 Exemples

13.6.3.5.6.1 Vérification du droit de modification

Le droit de modifier est le droit edit.

require_once("FDL/Class.Doc.php");
$doc = new_doc("", "1420"); // document n°1420
if ($doc->isAlive()) {
    if ($doc->hasPermission('edit')) {
        printf('Utilisateur "%s" a le droit de modifier "%s"'."\n",
            getCurrentUser()->login,
            $doc->getTitle()
        );
    } else {
        printf('Utilisateur "%s" n\'a pas le droit de modifier "%s"'."\n",
            getCurrentUser()->login,
            $doc->getTitle()
        );
    }
} else {
    printf("Document non trouvé\n");
}

Attention le droit edit ne suffit pas forcément pour autoriser la modification. Il peut être nécessaire de vérifier aussi le verrou (propriété locked).

13.6.3.5.6.2 Vérification de tous les droits

La liste des droits du documents est dans la propriété acls de l'objet.

require_once("FDL/Class.Doc.php");
$doc = new_doc("", "1420");
if ($doc->isAlive()) {
    $acls = $doc->acls;
    printf('Utilisateur "%s" a les droits suivants pour "%s" :'."\n",
        getCurrentUser()->login,
        $doc->getTitle()
    );
    foreach ($acls as $acl) {
        printf("Droit %-12s : %s\n", 
            $acl, 
            ($doc->hasPermission($acl))?"Oui":"Non"
        );
    }
} else {
    printf("Document non trouvé\n");
}

Résultat :

Utilisateur "zoo.garde" a les droits suivants pour "Théodor" :
Droit view         : Oui
Droit edit         : Non
Droit delete       : Non
Droit send         : Non
Droit unlock       : Non
Droit confidential : Non
Droit wask         : Non

13.6.3.5.7 Notes

Les méthodes Doc::enableEditControl() et Doc::disableEditControl() n'ont pas d'impact sur cette méthode.

13.6.3.5.8 Voir aussi

La sécurité des documents.

×
nouveauté