绕过ACL以使用itemsService运行更新



我正在尝试运行一个更新集合项的公共端点。我正在使用itemsService->update((,但出现了ForbiddenCollectionUpdateException错误。

{
"error": {
"code": 302,
"message": "Updating item from "products" collection was denied",
"class": "Directus\Permissions\Exception\ForbiddenCollectionUpdateException",
"file": "/var/www/app/src/core/Directus/Permissions/Acl.php",
"line": 1044
}
}

我尝试使用以下代码段将用户设置为管理员:

$this->_acl->setPublic(false);
$this->_acl->setUserId(1);
$this->_acl->setCollectionPermission('products', $this->_acl::PERMISSION_FULL);

当我转储$this->_acl的值时,我可以看到添加了产品的globalPermissions,但当我尝试端点时,异常仍然存在。

你知道我该怎么做吗?

TIA-

您是否在端点中运行此程序?

尝试使用以下语法(对我来说,将ACL设置为null似乎绕过了ACL身份验证,但仍将access_token用于Directus活动和修订目的(:

$container = DirectusApplicationApplication::getInstance()->getContainer();
$dbConnection = $container->get('database');
$acl = $container->get('acl');
$tableGateway = DirectusDatabaseTableGatewayFactory::create('COLLECTION_NAME', [
'connection' => $dbConnection,
'acl' => null (false)
]);

文件:https://docs.directus.io/advanced/api/data.html#fetching-挂钩和端点内的数据

最新更新