vTiger webservice "ACCESS_DENIED:拒绝id"的操作权限


vTiger webservice "ACCESS_DENIED : Permission to perform the operation is denied for id"

我想通过vTiger webservice添加SalesOrder。我正在使用这个vtwsclib。下面是代码:

<?php
include_once('vtwsclib/Vtiger/WSClient.php');
$url = 'http://localhost:8888';
$client = new Vtiger_WSClient($url);
$login = $client->doLogin('admin', 'zzzzzzzz');
if(!$login) echo 'Login Failed';
else {
    $data = array(
        'subject' => 'Test SalesOrder',
        'sostatus' => 'Created',
        'invoicestatus'=>'AutoCreated',
        'account_id'=> '46', // Existing account id
        'bill_street' => 'Bill Street',
        'ship_street' => 'Ship Street',
    );
    $record = $client->doCreate('SalesOrder', $data);
$error = $client->lasterror();
    if($error) {
    echo $error['code'] . ' : ' . $error['message'];
}
if($record) {
    $salesorderid = $client->getRecordId($record['id']);
}
}
?>

我只得到:"ACCESS_DENIED:执行该操作的权限被拒绝为id"。

Account_id在数据库中存在。其他SalesOrder添加了相同的account_id,但通过网页。我还尝试了accout_id ="6x46"的变体,其中6是module_id。它也没有起作用。有什么办法解决这个问题吗?

我认为你应该尝试11x46帐户id。Vtiger web服务实体id不同于tabid。

要获得所有实体id的正确列表,请在CRM的MySQL中执行以下命令:

select id, name from vtiger_ws_entity;

问题出在vtiger文档中。添加entityName GET请求参数。

var q = "select * from Users;";
"http://vtigercrm/webservice.php?operation=query&sessionName=ABC&entityName=XYZ&query="+q

这对我来说很有效。虽然仍然不能理解,通过给任何entityName或垃圾字符串,程序工作!!

我认为这是@Vtiger的web服务中的一个bug。您可以修改名为Create.php的文件,如下所示:(在*之间添加代码)

    foreach ($referenceFields as $fieldName => $details) {
    if (isset($element[$fieldName]) && strlen($element[$fieldName]) > 0) {
        *if($fieldName == 'roleid' || $fieldName == 'currency_id'){
            continue;                    
       }*
        $ids = vtws_getIdComponents($element[$fieldName]);
        $elemTypeId = $ids[0];
        $elemId = $ids[1];                
        $referenceObject = VtigerWebserviceObject::fromId($adb, $elemTypeId);
        if (!in_array($referenceObject->getEntityName(), $details)) {
            throw new WebServiceException(WebServiceErrorCode::$REFERENCEINVALID,
                    "Invalid reference specified for $fieldName");
        }
        if ($referenceObject->getEntityName() == 'Users') {
            if(!$meta->hasAssignPrivilege($element[$fieldName])) {
                throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Cannot assign record to the given user");
            }
        }
        if (!in_array($referenceObject->getEntityName(), $types['types']) && $referenceObject->getEntityName() != 'Users') {
            throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED,
                    "Permission to access reference type is denied" . $referenceObject->getEntityName());
        }
    } else if ($element[$fieldName] !== NULL) {
        unset($element[$fieldName]);
    }
}