This behavior allow to limit selected and update rows of model with some scope.

Example of using if you want to scope articles with scope user_id then in beforeFiler of ArticlesController we place next code.
Value ‘User.id’ placed into session during login.


   $this->Article->scopeSetup(array('user_id'=>$this->Session->read('User.id')));
   $this->Article->scopeEnable();

After this all insert and read will scoped with user_id value. 
Now for example possible to call $this->paginate() without any additional conditions.

Also before create and delete record behavior check that record from required scope. 

<?php /* 
 * Scope behavior for cakePHP 
 * comments, bug reports are welcome skie AT mail DOT ru 
 * @author Yevgeny Tomenko aka SkieDr 
 * @version 1.0.0.1 
 
 configuration is
 
 1)  array (’scope’ => array(‘parent_id’=>$parentIdValue, ’secondParent’=> $secondParentValue), ’enabled’ => true);
 
  2) array(‘parent_id’=>$parentIdValue, ’secondParent’=> $secondParentValue);
  3) array (‘enabled’ => false);
  
 */ 

class ScopeBehavior extends ModelBehavior {     var $settings null

;
    
    function 
setup(&$model$config 
= array()) {
        
$this->scopeSetup(&$model$config
);
    }
    
    function 
scopeSetup(&$model$config 
= array()) {
        
$settings = array(‘enabled’=>true
);
        if (isset(
$config['scope'
])) {
            
$settings['scope']=$config['scope'
];
        } else{
            
$settings['scope']=$config
;
        }
        if (isset(
$config['enabled'
])) {
            
$settings['enabled']=$config['enabled'
];
        }        
        
$this->settings[$model->name] = $settings
;
    }
    
    function 
scopeEnable (&$model
){
        
$this->settings[$model->name]['enabled'] = true
;        
    }
    function scopeDisable (&$model){
        
$this->settings[$model->name]['enabled'] = false
;        
    }
    
    
/**
     * Before find method. Called before all find
     *
     * Set scope filer settings
     *
     * @param AppModel $model
     * @return boolean True to continue, false to abort the save
     */ 
    
function beforeFind(&$model$cond
) {
        if (!
$this->settings[$model->name]['enabled']) return true
;
        if (!
is_array($cond['conditions'
])) {
            
$cond['conditions']=array($cond['conditions'
]);
        }
        foreach (
$this->settings[$model->name]['scope'] as $key => $value
) {
            
$cond['conditions'][$model->name.'.'.$key]=$value
;
        }    
        return 
$cond
;
    }      function 
beforeSave(&$model

) {
        if (!
$this->settings[$model->name]['enabled']) return true
;
        if (empty(
$model->data[$model->name][$model->primaryKey])) { 
//add
            
foreach ($this->settings[$model->name]['scope'] as $key => $value
) {
                
$model->data[$model->name][$key]=$value
;
            }
        } else { 
//update
            // now nothing to do
        
}
        return 
true
;
    } 
    function beforeDelete(&$model) {        
        if (!
$this->settings[$model->name]['enabled']) return true
;
        
        if (
$model->id!==false
) {
            
$curr=$model->read(null,$model->id
);
        }
        
        foreach (
$this->settings[$model->name]['scope'] as $key => $value
) {
            if (
$curr[$model->name][$key]!=$value) return false
;
        }
        
        return 
true
;
    } 
    
}
?>