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 :
et ajouter :
b. Donner au manager l'accès à un ou plusieurs composants de son choix se rendre ici :
et ajouter :
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 :
et ajouter à la fin sous
ceci :
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 :
et ajouter dans le if notre variable $editManagerComponents :
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 :
ajouter ceci :
Ici on restreint l'accès au contenu à l'administrateur et au super administrateur.
Puis se rendre dans 'administrator/modules/mod_fullmenu.php' ici :
et ajouter :
Puis aux environs de la ligne 135 :
modifier en ajoutant :
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
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' );
$this->_mos_add_acl( 'administration', 'install', 'users', 'administrator', 'components', 'all' );
$this->_mos_add_acl( 'administration', 'install', 'users', 'super administrator', 'components', 'all' );
Code PHP:
$this->_mos_add_acl( 'administration', 'install', 'users', 'manager', 'components', 'all' );
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
$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
Code PHP:
$this->_mos_add_acl( 'administration', 'edit', 'users', 'manager', 'components', 'com_nomDeVotreComposant' );
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' );
...
$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' );
...
Code PHP:
$canManageUsers = $acl->acl_check( 'administration', 'manage', 'users', $usertype, 'components', 'com_users' );
Code PHP:
$editManagerComponents = $acl->acl_check( 'administration', 'edit', 'users', $usertype, 'components', 'com_nomDeVotreComposant' );
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"
...
?>
_cmSplit,
[null,'Composants',null,null,'Gestion des composants',
<?php
$query = "SELECT *"
. "\n FROM #__components"
...
Code PHP:
<?if ($installComponents | $editManagerComponents) {
?>
_cmSplit,
[null,'Composants',null,null,'Gestion des composants',
<?php
$query = "SELECT *"
. "\n FROM #__components"
...
?>
_cmSplit,
[null,'Composants',null,null,'Gestion des composants',
<?php
$query = "SELECT *"
. "\n FROM #__components"
...
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' );
//$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' );
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' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'administrator', 'content', 'all' );
$this->_mos_add_acl( 'administration', 'edit', 'users', 'super administrator', 'content', 'all' );
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' );
...
$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' );
...
Code PHP:
$editContent = $acl->acl_check( 'administration', 'edit', 'users', $usertype, 'content', 'all' );
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',
...
?> [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',
...
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
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 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









