/**
* @ApiDoc(
* section="ACL Management",
* description="Saves the given rules"
* )
*
* @Rest\RequestParam(name="targetId", requirements=".+", strict=true, description="Target id")
* @Rest\RequestParam(name="targetType", requirements=".+", strict=true, description="Target type")
* @Rest\RequestParam(name="rules", strict=false, description="ACL rules array")
*
* @Rest\Post("/user/acl")
*
* @param int $targetId
* @param int $targetType
* @param array $rules
*
* @return bool
*/
public function saveAcl($targetId, $targetType, $rules = null)
{
$targetId += 0;
$targetType += 0;
AclQuery::create()->filterByTargetId($targetId)->filterByTargetType($targetType)->delete();
if (0 < count($rules)) {
$i = 1;
if (is_array($rules)) {
foreach ($rules as $rule) {
$ruleObject = new Acl();
$ruleObject->setPrio($i);
$ruleObject->setTargetType($targetType);
$ruleObject->setTargetId($targetId);
$ruleObject->setTargetId($targetId);
$ruleObject->setObject(Objects::normalizeObjectKey(@$rule['object']));
$ruleObject->setSub(filter_var(@$rule['sub'], FILTER_VALIDATE_BOOLEAN));
$ruleObject->setAccess(filter_var(@$rule['access'], FILTER_VALIDATE_BOOLEAN));
$ruleObject->setFields(@$rule['fields']);
$ruleObject->setConstraintType(@$rule['constraintType']);
$ruleObject->setConstraintCode(@$rule['constraintCode']);
$ruleObject->setMode(@$rule['mode'] + 0);
$ruleObject->save();
$i++;
}
}
}
$this->cacher->invalidateCache('core/acl');
return true;
}