Web Services vTiger Web服务“访问被拒绝:ID”“的执行操作权限被拒绝

pod7payv  于 2022-11-15  发布在  其他
关注(0)|答案(4)|浏览(178)

我想通过vTiger Web服务添加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']);
}

}
?>

而我得到的只有:“拒绝访问:ID”“得操作执行权限被拒绝.
Account_id存在于数据库中。其他SalesOrder是通过网页添加的,但使用了相同的account_id。我还尝试了accout_id =“6x46”的变体,其中6是module_id。它也不起作用。有什么想法如何解决这个问题吗?

5sxhfpxr

5sxhfpxr1#

我认为你应该尝试11x46的帐户ID。Vtiger网络服务实体ID与tabid不同。
要获得所有实体ID的正确列表,请在CRM的MySQL中执行以下命令:

select id, name from vtiger_ws_entity;
zbsbpyhn

zbsbpyhn2#

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

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

这对我来说很有效。虽然仍然不能理解,通过给任何entityName或垃圾字符串,程序工作!!!请评论,如果你知道更多关于这一点。

p4rjhz4m

p4rjhz4m3#

我认为这是@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]);
    }
}
dced5bon

dced5bon4#

这是一种可能有助于生成查询的方法**q**

"http://vtigercrm/webservice.php?operation=query&sessionName=ABC&query="+q

例如,您期望:

SELECT * FROM INVOICE WEHRE id='72xxx';

您可以

buildVtigerQuery('INVOICE', ['id' => '72xx']);

这是函数:

protected function buildQuery(
    string $moduleName,
    array $filterData = [],
    string $attributes = '*',
    int $start = 0,
    int $limit = null
): string {
    $query = 'SELECT ' . $attributes . ' FROM ' . $moduleName . ' ';
    if (!empty($filterData)) {
        $query .= 'WHERE ';
        foreach ($filterData as $key => $value) {
            $whereOperator = (is_numeric($value) === true) ? ' = ' : ' like ';
            $value = (is_numeric($value) === true) ? $value : '%' . $value . '%';
            $query .= $key . $whereOperator . '\'' . $value . '\'' . ' AND WHERE ';
        }
    }

    if (substr($query, -11) === ' AND WHERE ') {
        $query = substr_replace($query, "", -11);
    }

    if ((!is_null($limit)) && (0 < $start)) {
        $query .= ' ORDER BY id LIMIT ' . $start . ',' . $limit;
    }

    if (!is_null($limit) && (0 >= $start)) {
        $query .= ' ORDER BY id LIMIT ' . $limit;
    }

    return $query . ';';
}

我没有考虑XSS注入,因为我预期的查询**q**将写入url

相关问题