#python #acl #xml-rpc #odoo-14 #odoo-rpc
#python #acl #xml-rpc #odoo-14 #odoo-rpc
Вопрос:
Я пытаюсь использовать xmlrpc api odoo 14. Я создал небольшой скрипт для выполнения некоторых тестов. В тесте я выполняю операцию чтения, но получаю xmlrpc.client.Fault
исключение, где odoo компилирует то, что я пытаюсь изменить 'res.users'
, хотя мой запрос выполняется для чтения 'res.partner'
Вот мой тестовый скрипт. (Пожалуйста, обратите внимание, что ошибка будет такой же, если я попытаюсь выполнить search_read вместо search затем read)
#! /usr/bin/env python3
import xmlrpc.client
url = <redacted>
base = <redacted>
user = <redacted>
key = <redacted>
try:
api = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url))
mod = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url))
print("connection ... ", end='')
uid = api.authenticate(base, user, key, {})
print("ok. uid=",uid)
print("listing partners ... ", end='')
partners = mod.execute_kw(base, uid, key, 'res.partner', 'search', [[]])
print("ok. partners=", partners)
print("fetching partner ... ", end='')
res = mod.execute_kw(base, uid, key, 'res.partner', 'read', partners[:1])
print("ok. partner=", res)
except xmlrpc.client.Fault as e:
print("error !!!")
print(str(e))
Если я запускаю этот код, я получаю :
connection ... ok. uid= 6
listing partners ... ok. partners= [3, 15, 7, 10, 8, 9, 14, 13, 12, 11, 1, 16]
fetching partner ... error !!!
<Fault 4: "You are not allowed to modify 'Users' (res.users) records.nnThis operation is allowed for the following groups:nt- Administration/Access RightsnnContact your administrator to request access if necessary.">
Я не понимаю, почему он пытается что-то изменить, поскольку я выполняю чтение.
Это из-за вычисляемого поля в связанной модели? Имея это в виду, я также попытался выбрать нужные поля, и в этом примере код работает :
print("fetching partner names ... ", end='')
res = mod.execute_kw(base, uid, key, 'res.partner', 'read', partners[:1], {'fields': ['name']})
print("ok. names=", res)
Редактировать:
Пожалуйста, обратите внимание, что эта проблема возникает при входе в систему с пользователем, который имеет доступ на чтение, но не доступ на запись.
Комментарии:
1. В вашем первом примере второй параметр
execute_kw
метода должен бытьuid
notuser
.2. Извините за ошибку. На самом деле я тестировал с uid, но, должно быть, я перепутал копирование-вставку из более ранней версии моего теста.
Ответ №1:
Пожалуйста, проверьте это, что в этом дает.
models.execute_kw(base, uid, key, 'res.partner', 'check_access_rights', ['read'], {'raise_exception': False})
Решение:
Когда вы читаете какую-либо запись, все поля compute и related обновляют ее данные, поэтому я думаю, что это вызовет проблему.
Комментарии:
1. Я поместил строку непосредственно перед доступом для чтения, но получаю ту же ошибку.
2. Я специально этого не делаю. Извините, что я не прояснил это в вопросе.
3. Тогда у вас возникает проблема с доступом для конкретного пользователя, к которому вы обращаетесь.
4. Партнер связан с пользователями, верно? Я думаю, что это вызывает проблему.
5. Когда вы читаете какую-либо запись, все поля compute и related обновляют ее данные, поэтому я думаю, что это вызовет проблему.