EticWeb.info

Informations & astuces techniques CMS, CRM, Ecommerce...

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille

A voir également

Mais aussi

Hack ACL joomla

Envoyer Imprimer PDF
Par défaut [Astuce] - Restreindre les droits du manager (Contenu, composants & co)

Bonjour à tous, je viens vous proposer mon humble astuce inspirée d'autres astuces glanées sur le forum. J'ai compilé ici tout ce que j'ai trouvé sur le forum ainsi que ce que j'ai fait pour obtenir un profil manager optimisé à mes besoins.

Merci à Gregmab, flapy, et sûrement d'autres pour leurs aides directes ou indirectes.

Le but :

Restreindre les droits du compte manager de manière à ce qu'il n'ai accès qu'à un ou plusieurs composants sélectionnés et rien d'autre et masquer le menu 'Contenu'. Il existe un composant 'GMAccess' qui permet d'intervenir sur la gestion des droits, ma solution ne s'applique qu'à ceux qui désirent mettre les mains dans le code en évitant de passer par ce composant.

Remarque : j'attire l'attention sur le fait que, comme tout hack, en cas de mise à jour de joomla il faudra tout refaire.

Plan du tuto :
1. Afficher uniquement le ou les composants désirés dans le menu composant.
2. Customiser les accès aux menus du backend

1. Afficher uniquement le ou les composants désirés dans le menu Composant

- Ouvrir le fichier 'includes/gacl.class.php', deux choix possibles

a. Donner au manager l'accès total à tous les composants, se rendre ici :
Code PHP:
// access to components
$this->_mos_add_acl( 'administration', 'install', 'users', 'administrator', 'components', 'all' );
$this->_mos_add_acl( 'administration', 'install', 'users', 'super administrator', 'components', 'all' );
et ajouter :
Code PHP:
$this->_mos_add_acl( 'administration', 'install', 'users', 'manager', 'components', 'all' );
b. Donner au manager l'accès à un ou plusieurs composants de son choix se rendre ici :

Code PHP:
$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_newsflash' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_frontpage' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_media' );
// ** add additional components for a manager as desired, or give access to all
et ajouter :
Code PHP:
$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_nomDeVotreComposant' );
Vous pouvez ajouter l'accès à d'autres composants en créant à chaque fois une nouvelle ligne du même type que ci dessus.

Remarque : si l'on choisit la méthode 'a', on remarque que le menu composant ne s'affiche pas dans le backend, mais qu'un nouvel onglet 'Composants' est disponible sur la droite de la page d'accueil. Ici nous allons faire en sorte que le menu composant apparaisse au même endroit que pour le super administrateur.

- Ouvrir le fichier 'administrator/modules/mod_fullmenu.php' et se rendre ici :
Code PHP:
$manageTemplates = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_templates' );
$manageTrash = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_trash' );
$manageMenuMan = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_menumanager' );
$manageLanguages = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_languages' );
$installModules = $acl->acl_check( 'administration', 'install', 'users', $usertype, 'modules', 'all' );
...
et ajouter à la fin sous
Code PHP:
$canManageUsers = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_users' );
ceci :
Code PHP:
$editManagerComponents = $acl->acl_check( 'administration', 'edit', 'users', $usertype, 'components', 'com_nomDeVotreComposant' );
Explication : Le nom de la variable est totalement libre, il faudra créer autant de variables ici que de composants à afficher. En attendant que quelqu'un souffle une solution plus pro.

Puis se rendre aux environs de la ligne 168, ici :
Code PHP:
<?if ($installComponents) {
?>
_cmSplit,
[null,'Composants',null,null,'Gestion des composants',
<?php
$query
= "SELECT *"
. "\n FROM #__components"
...
et ajouter dans le if notre variable $editManagerComponents :
Code PHP:
<?if ($installComponents | $editManagerComponents) {
?>
_cmSplit,
[null,'Composants',null,null,'Gestion des composants',
<?php
$query
= "SELECT *"
. "\n FROM #__components"
...
Ceci fait, en se connectant en tant que manager, vous verrez le menu composant avec uniquement le (ou les) composants choisis.

2. Customiser les accès aux menus du backend

Ici on va masquer le menu 'Content' pour les manager de cette façon ils ne pourront plus créer, publier, éditer les articles du site.

- Dans le fichier 'includes/gacl.class.php', aux environs de la ligne 135 :
Code PHP:
// access to language
//$this->_mos_add_acl( 'administration', 'manage', 'users', 'administrator', 'components', 'com_languages' );
$this->_mos_add_acl( 'administration', 'manage', 'users', 'super administrator', 'components', 'com_languages' );
$this->_mos_add_acl( 'administration', 'install', 'users', 'super administrator', 'languages', 'all' );
ajouter ceci :
Code PHP:
// access to content
$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'content', 'all' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'super administrator', 'content', 'all' );
Ici on restreint l'accès au contenu à l'administrateur et au super administrateur.

Puis se rendre dans 'administrator/modules/mod_fullmenu.php' ici :
Code PHP:
$manageTemplates = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_templates' );
$manageTrash = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_trash' );
$manageMenuMan = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_menumanager' );
$manageLanguages = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_languages' );
$installModules = $acl->acl_check( 'administration', 'install', 'users', $usertype, 'modules', 'all' );
...
et ajouter :
Code PHP:
$editContent = $acl->acl_check( 'administration', 'edit', 'users', $usertype, 'content', 'all' );
Puis aux environs de la ligne 135 :
Code PHP:
<?// Content Sub-Menu
?> [null,'Contenu',null,null,'Gestion des articles',
<?php
if (count($sections) > 0 ) {
?> ['<img src="/../includes/js/ThemeOffice/edit.png" />','Articles par Section',null,null,'Gestion des articles',
...
modifier en ajoutant :
Code PHP:
<?// Manage Content
if ($editContent) {
// Content Sub-Menu
?> [null,'Contenu',null,null,'Gestion des articles',
<?php
if (count($sections) > 0 ) {
?> ['<img src="/../includes/js/ThemeOffice/edit.png" />','Articles par Section',null,null,'Gestion des articles',
...
['<img src="/../includes/js/ThemeOffice/globe3.png" />', 'Impressions de Page', 'index2.php?option=com_statistics&task=pageimp', null, 'Impressions de Page'],
],
<?php
} //fin $editContent
// Components Sub-Menu
A partir de là, en se connectant avec un compte manager, le menu 'Contenu' n'apparaît plus

A vous de personaliser pour cacher les autres menus dans la même idée.

Désolé si tout ça existe quelque part, dans un endroit que je n'aurais pas trouvé, c'est juste histoire de compiler toutes les infos.

Bon courage
Vous êtes ici : Page non trouvée