public function generateEdges() { $this->executeUpdate('TRUNCATE acl_edges'); $main = Resources::create()->select(['parent_id' => 1]); // add the resource itself first where parent is root foreach ($main as $res) { $this->insert(['source' => $res['id'], 'target' => $res['id']]); } // add pages itself as separete - not as a child of the root if exists $q = 'INSERT INTO acl_edges ( SELECT res.id as source, res.id as target FROM acl_resources r LEFT JOIN acl_resources res ON res.parent_id = r.id WHERE res.id is not null AND r.id <> 1 AND res.page_place != 0 ORDER BY source, target)'; $count = $this->executeUpdate($q); // add all other $sql = 'INSERT INTO acl_edges ( SELECT r.id as source, res.id as target FROM acl_resources r LEFT JOIN acl_resources res ON res.parent_id = r.id WHERE res.id is not null AND r.id <> 1 AND res.page_place = 0 ORDER BY source, target)'; $count += $this->executeUpdate($sql); return $count; }
public function permitRecursive($userId, array $resourceIds) { $res = new Resources(); foreach ($resourceIds as $id) { $this->insert(array('user_id' => $userId, 'resource_id' => $id)); $children = $res->getChildren($id); foreach ($children as $child) { $this->insert(array('user_id' => $userId, 'resource_id' => $child['id'])); } } }