I want to utilise the concept of groups in ACL. I am very new to
cakephp, and messed up with ACL. My database tables are as follows:
CREATE TABLE IF NOT EXISTS `gcfa_groups` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `gcfa_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `password` varchar(50) NOT NULL,
  `active` tinyint(4) NOT NULL DEFAULT '1',
  `email` varchar(255) DEFAULT NULL,
  `group_id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
);

id is being used as username.

My model files are as follows:
class User extends AppModel {
        var $name = 'User';

        var $hasMany = array('UserBank', 'UserNominee', 'Payment');
        var $belongsTo = array(
                                        'Group' => array('className' => 'Group',
                                                                'foreignKey' => 
'group_id'
                                        )
                                );
        public $actsAs = array('Acl' => array('type' => 'requester'));

        public function parentNode() {
                if (!$this->id && empty($this->data)) {
                return null;
            }
            $data = $this->data;
            if (empty($this->data) || empty($this->data['User']['group_id']))
{
                $data = $this->read();
            }

            if (!$data['User']['group_id']) {
                return null;
            } else {
                $this->Group->id = $data['User']['group_id'];
                        $groupNode = $this->Group->node();
                        return array('Group' => array('id' => 
$groupNode[0]['Aro']
['foreign_key']));
            }
        }

        public function bindNode($object) {
                if (!empty($object[$this->alias]['group_id'])) {
                        return array('model' => 'Group', 'foreign_key' => 
$object[$this-
>alias]['group_id']);
                }
        }


        function isAuthorized($user, $controller, $action) {
                return true;
        }

}

class Group extends AppModel {
        public $displayField = 'name';
        var $hasMany = array('User');

        public $actsAs = array('Acl' => array('requester'));

        public function parentNode() {
                return null;
        }
}

I just baked the controller and view files for these models using
shell. I have setup my ACL as follows:
id      parent_id       model   foreign_key     alias   lft     rght
1       NULL    Group   1       SuperUser       1       2
2       NULL    Group   2       Administrator   3       4
3       NULL    Group   3       Manager                 5       6
4       NULL    Group   4       Author          7       8

Whenever I am going to edit any user it is giving me error :
Warning (512): AclNode::node() - Couldn't find Aro node identified by
"Array
(
    [Aro0.model] => User
    [Aro0.foreign_key] => 2
)
" [CORE/Cake/Model/AclNode.php, line 179]

Do I need to make separate entry of every user in aros table? If yes,
then what is the use of groups in this case? If I want to bypass this
creation of new entry in acos table, is it possible? I think if I am
able to override AclBehaviour::afterSave method then I can do that.
I dont want to create a separate entry for every user in the ACL.

-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
cake-php+unsubscr...@googlegroups.com For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to