Example #1
0
    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;
    }
Example #2
0
 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']));
         }
     }
 }