Restrict DCI sync and cached value access#234
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces access control restrictions for syncing DCI-backed CEL values. It disables default read access to spp.data.value for base users, restricts the sync action to CEL Domain Managers, and adds a permission check in sync_for_partners along with a corresponding unit test. Feedback on the changes suggests updating the access check in _check_dci_sync_access to bypass the group check when running in superuser mode (self.env.su), preventing unexpected AccessError exceptions during sudo() operations.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 19.0 #234 +/- ##
==========================================
+ Coverage 74.47% 74.60% +0.13%
==========================================
Files 1062 1077 +15
Lines 63833 64319 +486
==========================================
+ Hits 47540 47987 +447
- Misses 16293 16332 +39
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
Add an explicit superuser early-return to _check_dci_sync_access so the scheduled sync cron (user_id=base.user_root, su mode) passes its own gate, mirroring spp_cel_domain data_credential.py. Add positive tests for the CEL-manager allow path and the su/cron bypass.
ea59ead to
ee403cf
Compare
Follow-up: a second outbound-fetch route is not covered by this gateThis PR gates The path:
Exploitability is unconfirmed. I found no button/action/RPC exposing Suggested follow-up:
Note: the new |
CI pre-commit prettier (plugin-xml) requires the long group_ids server-action field to be wrapped across lines, matching the file's existing field style.
Motivation
sync_for_partners()entrypoint allowed arbitrary internal users to trigger outbound DCI lookups and populate sensitive disability/health indicators into the shared cachespp.data.valuewithout authorization.dr.dci.has_disability, severity flags) are sensitive and were readable bybase.group_uservia existing ACLs, creating a confidentiality risk.user_id, making scheduled execution ambiguous and potentially privileged operations less explicit.Description
_check_dci_sync_access()tospp.dci.cel.fetcherwhich raisesAccessErrorunless the caller has thespp_cel_domain.group_cel_domain_managergroup, and invoked it at the start ofsync_for_partners()to block low-privileged RPC/server calls.action_sync_dci_valuesto CEL Domain Managers by adding agroup_idsentry and set the scheduled cronuser_idtobase.user_rootso scheduled syncs remain explicit and privileged.base.group_userread permission formodel_spp_data_valueinspp_cel_domain/security/ir.model.access.csv(set read to0) so cached DCI values are no longer globally visible to basic internal users.base.group_user) receivesAccessErrorwhen callingsync_for_partners()directly (test_sync_for_partners_requires_cel_manager).Testing
python3 -m py_compileon the modified files (spp_dci_indicators/models/dci_cel_fetcher.pyand tests) and compilation succeeded.spp_dci_indicators/data/dci_sync.xml) withxml.etree.ElementTree.parseand performed a static ACL check onspp_cel_domain/security/ir.model.access.csv, both of which succeeded.git diff --checkand static checks with no reported issues.TransactionCasetest suite butimport odoofailed in this environment so full integration/unit test execution could not be performed here; a new unit test was added and should run in CI where Odoo is available.Codex Task