Comment puis-je obtenir le niveau d'accès pour une URL donnée?
J'ai besoin de savoir si une URL est accessible aux utilisateurs enregistrés ou uniquement aux invités.
Je ne pense pas qu'il y ait des informations sur l'accès au niveau de l'URL, pas plus qu'il n'y a de "chose globale" qui contrôle l'accès à n'importe quelle URL/page, vous pouvez donc récupérer ces informations dans une liste.
Niveaux d'accès se produit beaucoup plus bas dans le système - Cela fonctionne sur chaque composant et ses éléments de contenu.
Avec ACL vous ne définissez pas l'accès aux URL, vous le faites plutôt pour les éléments de contenu individuellement.
Généralement, les composants ont des options pour spécifier les niveaux d'accès pour leurs éléments de conten, qui sont stockés dans le tableau des éléments associatifs = dans la base de données.
Après avoir demandé une page via une URL, Joomla renverra le contenu de cette page en fonction de la requête url, qui spécifie généralement un composant, une vue et un élément de contenu.
Habituellement, le code du composant chargé d’afficher le contenu ci-dessus vérifie le niveau d’accès de l’objet de contenu stocké dans la base de données et le compare au niveau d’accès à la vue de l’utilisateur actuel, afin de décider s’il affichera ou pas le contenu à cet utilisateur.
Donc, ceci conclut en ce qui concerne la liste de contrôle d'accès, que ce que vous devez vérifier concerne les niveaux d'accès aux éléments de contenu spécifiques.
Ce que je peux penser est proche de ce que vous voudrez peut-être, c’est de vérifier le niveau d’accès à l’élément de men, puisque Éléments de men joue un grand rôle dans affichage du conten = et construction des URL. Mais gardez à l'esprit qu'il peut y avoir tellement de situations, où un élément de menu peut avoir un niveau d'accès public, alors que le contenu inclus est à un niveau restreint.
Dans tous les cas, si vous devez vérifier le niveau d'accès pour un élément de menu, vous pouvez procéder comme suit:
$app = JFactory::getApplication();
$menu = $app->getMenu();
$menuActive = $menu->getActive();
$menuActive->access;
Pour un article, vous pouvez aller comme ceci:
jimport('joomla.application.component.model');
JModelLegacy::addIncludePath(JPATH_SITE.'/components/com_content/models');
$articleModel = JModelLegacy::getInstance( 'Article', 'ContentModel' );
$article = $articleModel->getItem($articleID);
$article->access;
* Il serait utile d’obtenir une meilleure réponse si vous précisiez l’endroit où vous voulez obtenir ces informations et décrivez ce que vous essayez d’atteindre.
De Joomla 3.8 et supérieur vous pouvez utiliser Namespacing
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
BaseDatabaseModel::addIncludePath(JPATH_SITE . '/components/com_content/models');
$articleModel = BaseDatabaseModel::getInstance('Article', 'ContentModel');
$article = $articleModel->getItem($articleId);
$access = $article->access;