I could've sworn I've done the tutorial correctly, but I am getting an error message and my aros_acos table is empty.
What I've already done:
On this page: http://book.cakephp.org/view/646/Creating-ACOs I've run "cake acl create aco root controllers" and it returned "New Aco 'controllers' created.". I've also added "$this->Auth->actionPath = 'controllers/';" to the beforeFilter() of AppsController. I do not understand the other piece of code since it is badly explained where it should go -- what exactly does it mean by "using the AclComponent"?
I've run the build_acl() from this page: http://book.cakephp.org/view/647/An-Automated-tool-for-creating-ACOs It has populated my 'acos' table with 46 entries.
This is the page where I believe the issues lies: http://book.cakephp.org/view/648/Setting-up-permissions I copied the code found on the page into my apps_controller.php and ammended it slightly to point to the ids of the groups I'm using:
function initDB() { $group =& $this->User->Group;
//Allow admins to everything $group->id = 5; $this->Acl->allow($group, 'controllers'); //allow managers to posts and widgets $group->id = 6; $this->Acl->deny($group, 'controllers'); $this->Acl->allow($group, 'controllers/Posts'); $this->Acl->allow($group, 'controllers/Widgets'); //allow users to only add and edit on posts and widgets $group->id = 7; $this->Acl->deny($group, 'controllers'); $this->Acl->allow($group, 'controllers/Posts/add'); $this->Acl->allow($group, 'controllers/Posts/edit'); $this->Acl->allow($group, 'controllers/Widgets/add'); $this->Acl->allow($group, 'controllers/Widgets/edit');
}
I've also taken all references to allowedActions from my users and groups controllers, and added the correct code to my posts, widgets and AppController pages...
When running the initDB() inside AppController by visiting http://localhost/basic_cake2/groups/initDB I get a warning message on the top of my screen. It says:
DbAcl::allow() - Invalid node [CORE/cake/libs/controller/components/acl.php, line 325]
CONTEXT:
$aro = stdClass stdClass::$id = 5 $aco = "controllers" $actions = "*" $value = 1 $perms = false $permKeys = array( "_create", "_read", "_update", "_delete" ) $save = array()
CODE:
if ($perms == false) { trigger_error(__('DbAcl::allow() -
Invalid node', true), E_USER_WARNING);
AND ALSO SHOWS:
DbAcl::allow() - CORE/cake/libs/controller/components/acl.php, line 325 AclComponent::allow() - CORE/cake/libs/controller/components/acl.php, line 101 AppController::initDB() - APP/app_controller.php, line 23 Object::dispatchMethod() - CORE/cake/libs/object.php, line 116 Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 227 Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 194 [main] - APP/webroot/index.php, line 88
On checking the aros_acos table I find that nothing has been added!
Therefore the authentication doesn't work on any pages... :( Does anybody have any ideas? I've no idea how to debug this and I asked on #cakephp but they were quite silent in response and basically just told me to re-read the documentation.
EDIT: Okay, so I read the tutorial a little harder and it turns out I've been running the function from the wrong file. I moved it to the Users Controller and it added 3 rows to the aros_acos table.
However, I'm still getting that error message so I think something is still going wrong!
The context for the error message does seem to have changed, which is interesting. It now reads:
$aro = Group
Group::$name = "Group"
Group::$validate = array
Group::$hasMany = array
Group::$actsAs = array
Group::$useDbConfig = "default"
Group::$useTable = "groups"
Group::$displayField = "name"
Group::$id = 6
Group::$data = array
Group::$table = "groups"
Group::$primaryKey = "id"
Group::$_schema = array
Group::$validationErrors = array
Group::$tablePrefix = ""
Group::$alias = "Group"
Group::$tableToModel = array
Group::$logTransactions = false
Group::$transactional = false
Group::$cacheQueries = false
Group::$belongsTo = array
Group::$hasOne = array
Group::$hasAndBelongsToMany = array
Group::$Behaviors = BehaviorCollection object
Group::$whitelist = array
Group::$cacheSources = true
Group::$findQueryType = NULL
Group::$recursive = 1
Group::$order = NULL
Group::$__exists = NULL
Group::$__associationKeys = array
Group::$__associations = array
Group::$__backAssociation = array
Group::$__insertID = NULL
Group::$__numRows = NULL
Group::$__affectedRows = NULL
Group::$_findMethods = array
Group::$_log = NULL
Group::$User = User object
Group::$Aro = Aro object
$aco = "controllers/Posts"
$actions = "*"
$value = 1
$perms = false
$permKeys = array(
"_create",
"_read",
"_update",
"_delete"
)
$save = array()