Bonjour,
J'ai mis en place l'ACL et ca semble bien fonctionner.
J'aimerais pouvoir changer mes permissions sans passer par la console et j'ai vu qu'il y a ds truc du genre
Gestionnaire d'ACL
Ou l'on peut meme syncroniser les acos.
J'aimerais savoir si quelqu'un connaitrait une facon d'implémenter ceci, une librairie, un tuto?
Salut
Un petit plugin génial que j'utilise
https://github.com/FMCorz/AclManager
qui fonctionne tres bien et qui te donne une interface comme tu veux.
ensuite tu n'as qua modifier la vue dans le plugin pour y metre le style que tu souhaite.
Ha oui, je suis en train de regarder celui ci mais je n'arrive pas a le faire fonctionner.
Je pense que c'est a cause e mon beforeFind, tu peux me filer un coup de pouce?
En fait, j'ai
Avant il y avait Role à la place de Group, car dans mon AROS j'ai des Group et pas des Role.
Ensuite je pense que mon problème vient de la;
Mon beforeFinde de mon AppController est le suivant
function beforeFilter(){
$this->Auth->loginAction = array('controller'=>'users','action'=>'login','admin'=>false);
//$this->Auth->authorize = array('controller'); //action, cron, controller
if(!isset($this->request->params'prefix'])){
parent::beforeFilter();
$this->Auth->allow();
}else{
}
// Permet de définir le layout à utiliser au lieux de celui par defaut (admin_index)
if(isset($this->request->params'prefix']) && $this->request->params'prefix'] == 'admin'){
$this->layout='admin';
}
}
J'ose pas trop le modifer (je suis débutant) pyr crainte que ce que j'ai fait ne marche plus.... :o)
Es-ce que j'ai loupé un truc?
Milles merci
J'ai rwmarqué que quand je vais sur
localhost:8888/cakephp/AclManager/acl
Missing Controller
Error: AclManager.PagesController could not be found.
Error: Create the class PagesController below in file: /Applications/MAMP/htdocs/cakephp/app/Plugin/AclManager/Controller/PagesController.php
Je ne devrais pas avoir besoin de créer un controller?
Est ce que tu a regénérer tes aco ?
Est ce que tu utilises le plugin acl_extra ?
tu ne peux surement pas y acceder car acl ne sais pas que ce plugin existe donc il te bloque
et est ce que tu as ajouter ceci apres ton beforeFilter dans ton appController ?
function isAuthorized($user) {
// return false;
return $this->Auth->loggedIn();
}
Oui alors excuse moi.
Oui j'ai créé ma table ACOS, AROS et AROS_ACOS.
Quand je crée un utlisateur ou un groupe, la table AROS se met bien a jour.
Aussi, depuis ma console, j'ai executé la commande
./cake AclExtras.AclExtras aco_sync
et ma table ACOS s'est complétée.
Finalement j'ai exécuté cette fonction, pour tester (j'espère qu'il n'y a pas d'errur) qui se trouve dans mon AclController, et ma table AROS_ACOS, c'est remplie.
public function initACL() {
$group = $this->User->Group;
//Allow admins to everything
$group->id = 1; // Super administrator
$this->Acl->allow($group, 'controllers');
//allow managers to posts and widgets
$group->id = 2; // Administrator
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Users/logout');
$this->Acl->allow($group, 'controllers/Posts');
$this->Acl->allow($group, 'controllers/Pages');
/*
$this->Acl->allow($group, 'controllers/Settings');
$this->Acl->allow($group, 'controllers/Users');
$this->Acl->allow($group, 'controllers/Groups');
$this->Acl->allow($group, 'controllers/Filemanager');
$this->Acl->allow($group, 'controllers/Categories');
*/
//allow users to only add and edit on posts and widgets
$group->id = 3; //Editor of all pages
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Users/logout');
$this->Acl->allow($group, 'controllers/Posts');
$this->Acl->allow($group, 'controllers/Pages');
$this->Acl->allow($group, 'controllers/Categories');
// $this->Acl->allow($group, 'controllers/Socials');
$this->Acl->allow($group, 'controllers/Posts');
$this->Acl->allow($group, 'controllers/Filemanager');
//allow users to only add and edit on posts and widgets
$group->id = 4; //Editor page
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Users/logout');
$this->Acl->allow($group, 'controllers/Pages/admin_edit');
$this->Acl->allow($group, 'controllers/Filemanager');
$group->id = 5; // Editor Post
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Users/logout');
$this->Acl->allow($group, 'controllers/Posts/admin_edit');
$this->Acl->allow($group, 'controllers/Filemanager');
//nous ajoutons un exit pour éviter d'avoir un message d'erreur affreux "missing views" (manque une vue)
echo "tout est ok";
exit;
}
Si dans AclController, dans l'action admin_index, je met ca:
$user = $this->Auth->user();
$checkPerm = $this->Acl->check(array(
'model' => 'Group',
'foreign_key' => 1
), 'Posts/admin_edit');
debug($checkPerm);
Ben j'ai un true pour l'utilisateur de mon group 1 et un false pour l'utilisateur de mon group 4
Donc ca semble fonctionner.
Oui j'ai ajoutl ceci après le beforeFind
function isAuthorized($user) {
// return false;
return $this->Auth->loggedIn();
}
Aussi, information complémentaire, dans mon AppController, j'ai aussi ceci:
public $components = array(
'Acl',
'Auth' => array(
// For the ACL
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
),
// Mets des condition au niveau de la validation d'authentificate
// Contient l'ensemble des methode d'authentification
'authenticate' => array(
// Mehtode Form est utilisée
'Form' => array(
// Defini les paramêtre scope. Ici défini que le compte doit est actif
'scope'=> array('User.active' =>1)
)
)
),
'Session'
);
Me reste plus qu'a le géré :o))
Un autre truc intéressant,
Dans /app/plugin/AclManager/Conf/bootstrap/m j'ai clcommenté cette ligne
Configure::write('AclManager.prefix', 'admin');
Donc depuis, je peux aller sur
localhost:8888/cakephp/admin/acl_manager/acl
Cependant j'ai un nouveau message d'erreur
Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check. Node references:
Aro: Array
(
[User] => Array
(
[id] => 1
[username] => superadmin
[email] => info@hello.net
[firstname] =>
[lastname] =>
[birthday] => 2013-12-12
[group_id] => 1
[role] => admin
[active] => 1
[activationcode] =>
[created] => 2013-12-02 14:53:29
[lastlogin] => 2013-12-05 16:25:53
[Group] => Array
(
[id] => 1
[name] => Super
[created] => 2013-12-02 14:52:55
[modified] => 2013-12-04 23:45:13
)
)
)
Aco: controllers/AclManager/Acl/index [CORE/Cake/Model/Permission.php, line 92]
Permission::check() - CORE/Cake/Model/Permission.php, line 92
DbAcl::check() - CORE/Cake/Controller/Component/Acl/DbAcl.php, line 74
AclComponent::check() - CORE/Cake/Controller/Component/AclComponent.php, line 110
ActionsAuthorize::authorize() - CORE/Cake/Controller/Component/Auth/ActionsAuthorize.php, line 40
AuthComponent::isAuthorized() - CORE/Cake/Controller/Component/AuthComponent.php, line 462
AuthComponent::startup() - CORE/Cake/Controller/Component/AuthComponent.php, line 307
ObjectCollection::trigger() - CORE/Cake/Utility/ObjectCollection.php, line 132
call_user_func - [internal], line ??
CakeEventManager::dispatch() - CORE/Cake/Event/CakeEventManager.php, line 247
Controller::startupProcess() - CORE/Cake/Controller/Controller.php, line 675
Dispatcher::_invoke() - CORE/Cake/Routing/Dispatcher.php, line 182
Dispatcher::dispatch() - CORE/Cake/Routing/Dispatcher.php, line 160
[main] - APP/webroot/index.php, line 92
Ok j'ai trouvé et c'est tout con.
J'ai installé comme il le faut, sauf que mes ACOS n'avais pas été mis a jour par le fait qu'il y a un nouveau Controller : AclManager....
Je suis allé dans mon terminal et j'ai lancé la commande.
./cake AclExtras.AclExtras aco_sync
Puis ensuite je suis allé dans
localhost:8888/cakephp/admin/acl_manager/acl et la je suis tombé sur une page ou je peux controller mes ACL.
Ca semble bon, je vais essayé tout ca!!!!!
Ca l'air tro top.
Petite et derniere question, je ne peux pas avoir ce plugin dans /app/controller/, comme j'ai tous les autre?
Quel est l'aventage d'un plugin sur un Controller comme /app/Controller/UsersController.php??
ou encore : /app/Controller/AclmanagerController.php???
Milles mercis pour votre réponse!
Un plugin est réutilisable plus facile à distribuer et tu n'as qua retravailler la route pour que ca resemble au reste de ton application
Salut merci pour ta réponse.
Ben c'est ce que j'éssaye de faire
J'ai réussi a fair un routing avec mon lien
<?php echo $this->Html->link("ACLs",array('controller'=>'acl_manager','action'=>'acl'),array('class'=>'')); ?>
Mon plugin se trouve dans
/app/plugin/acl_manager
je charge mon plugin ainsi:
CakePlugin::load('AclManager', array('bootstrap' => true));
Donc quand je clique sur mon lien, mon URL est:
http://localhost:8888/cakephp/admin/acl_manager/acl
mais j'aimerais avoir
http://localhost:8888/cakephp/admin/acl
J'ai donc essayé de modifier mon route ainsi mais sans succès
Router::connect('/admin/acl',array('plugin'=>'AclManager','controller'=>'acl_manager','action'=>'acl'),'ACL');
Je vais encore cherche à corriger mon Route:: mais pour le moment c'est... bof :o)
ton 2eme parametre de ton
Router::connect
doit etre identique à ton 2eme parametre de ton
$this->Html->link