VH Field Encryption
Keep your most sensitive data โ salaries, IDs, bank details โ readable only by the right people. Not colleagues, not IT, not even a system administrator.
What it does
Pick any field you want to protect โ a salary, a national ID, a bank account number, a private note โ and this module locks it so only the people you choose can read it. Everyone else, no matter what permissions they have, simply sees ********. The real value is never shown to the wrong person, and never stored in a readable form.
The difference from just "hiding a field from a group": here, having permission is not the same as being able to read. Each authorized person unlocks the data with their own personal key, so even an administrator who gives themselves extra rights still can't see the numbers.
Encrypted on the screen and in the database
Most tools only hide a field on screen โ the real value still sits in the database for anyone with database access to read. Here it is genuinely encrypted in both places, so there is nowhere the wrong person can go to read it.
๐ On the screen (UI)
Without your key, the field shows ********. Even a user with full access rights sees only the mask โ until you unlock it, the value never appears.
๐พ In the database (stored)
The value is stored encrypted โ the real number is never written to the database. Open the tables directly, run a report or a backup, and you find only encrypted text. No back door, no shared master password on the server.
Two layers, one guarantee: no key, no readable value โ anywhere.
Reading the database tables directly: the real value is gone โ only a fixed placeholder and ciphertext remain.
Why teams choose it
๐ค Everyone sees only what's theirs
An employee opens their own record and sees their own salary โ open a colleague's, and it stays masked.
๐ข HR & payroll keep working
The people who need the full picture (HR, payroll) can read everything they're allowed to โ unlock once and carry on.
๐ Admins can't peek
Granting yourself extra rights is not enough to read protected data โ strong protection against snooping and privilege abuse.
โ๏ธ No-code access rules
Decide who can read what โ by team, by person, or by condition โ from simple settings. No programming to manage permissions.
๐พ You won't get locked out
A master recovery key and one-click re-issue keep you covered if a staff member forgets their passphrase or changes device.
๐ Works on any field
Salaries, national IDs, bank accounts, contract terms, private notes โ protect exactly the fields that matter, on any screen.
โณ Convenient every day
HR staff can stay unlocked on their own device for a working session, instead of typing a passphrase all day.
๐ก๏ธ Made for compliance
Keep personal and financial data unreadable to unauthorized eyes โ a practical step toward GDPR / data-protection expectations.
Choose the level of protection per field
Everyday protection
Best for values the system still needs to work with โ e.g. salaries used by payroll and reports. Hidden from the wrong people, while your calculations keep running normally.
Maximum privacy
Best for view-only secrets โ a national ID, a bank account, a private note. The real value only ever appears in your own browser, so not even the server or IT can see it.
You choose the level for each field โ mix and match to fit your business.
๐งฎ Calculated fields
Protect the input fields (salaries, amounts, IDs) directly on this Odoo version. Encrypting a computedโ+โstored result field (e.g. a derived net wage) is available on Odoo 14 and above.
Easy to set up โ and fully documented
You don't have to figure it out alone. The module ships with a
complete step-by-step user guide (doc/USER_GUIDE.md) that walks you through installation,
configuration and every real-world scenario with a worked example โ from "an employee sees only
their own salary" to "HR reads everything", tiered access, granting one specific person, and recovering data.
So you can set it up with confidence, at your own pace, and know exactly what each option does. Every purchase includes support if you get stuck.
โ Compatibility: available for Odoo 12, 13, 14, 15, 16, 17 and 18 (Community & Enterprise). Encrypting computedโ+โstored fields requires Odoo 14 or above.
See it in action
Set up your key โ each person creates their own key and unlocks with a passphrase.
Simple settings โ master key, privacy level, auto-lock and device sessions, all in one place.
Who can read what โ no-code rules by team, by person, or by condition; scope exactly which records they can open.
Never get locked out โ re-issue a staff member's key in one click, and optionally re-grant access to existing data.
Need help?
Questions, bug reports or feature requests โ email us and we'll reply within one business day. Every purchase includes support.
Support: vuhaiqn90@gmail.com
Please include your Odoo version so we can help faster.
License OPL-1 ยท ยฉ Nguyแป n Vลฉ Hแบฃi (Uviah)
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 1936 |
| Technical Name |
vh_field_encrypt |
| License | OPL-1 |
| Website | https://apps.odoo.com/apps/modules/browse?author=Uv+Iah |
Field Encryption โ zero-knowledge, per-user field encryption
Overview
VH Field Encryption encrypts individual model fields at rest with strong, multi-recipient (envelope) encryption. Mark a field encrypt=True (server mode) or encrypt='client' (zero-knowledge, browser-only) and the module stores the value encrypted in an auto-generated companion column and decrypts it only for authorized, unlocked users.
The key difference from "hide a field by group": access rights are not the key. A user who can view a record still sees only ******** unless one of their keys is a recipient โ so even an administrator who grants themselves extra rights cannot read the data without a private key.
Key ideas:
- Envelope / multi-recipient โ each value is encrypted once and readable by several keys: the record owner (an employee sees only their own salary), an HR/Recovery group (decrypt everything) and a master recovery key.
- Per-user keys โ every user has a key pair; the private key lives ONLY in the browser vault (passphrase-wrapped in IndexedDB), never in the server session.
- Two security tiers โ server mode (supports server-side compute such as payroll) and zero-knowledge client mode (key & plaintext never reach the server).
- HR-friendly โ opt-in "keep unlocked on this device" for a bounded session, and a re-wrap tool to grant new readers access to existing data.
Installation
Install the Python packages in your Odoo environment:
pip install eciespy coincurve cryptography
Copy vh_field_encrypt into your addons path, update the apps list and install VH Field Encryption, then restart Odoo. It depends on base, web and mail.
A modern browser (Web Crypto + IndexedDB) is required. The eciesjs library is bundled โ no CDN needed.
Configuration
- Settings โ Field Encryption โ Master Encryption Key โ Generate Key and store the private key shown once as your last-resort recovery key.
- Add payroll / HR staff to the group Field Encryption: Recovery / HR Reader.
- (Optional) Map record owners under Owner Mappings, e.g. hr.payslip โ employee_id.user_id, and add fine-grained Recovery Rules per model.
- Each user clicks the lock icon โ Generate a new key for me โ sets a passphrase โ Save & Unlock.
See doc/USER_GUIDE.md for step-by-step configuration and every case with a worked example.
Usage
Mark fields in your own model and (for client mode) use the widget:
net_salary = fields.Monetary(encrypt=True) # server mode (compute-friendly) bank_note = fields.Char(encrypt='client') # zero-knowledge (view-only) <field name="enc_bank_note" invisible="1"/> <field name="bank_note" widget="vh_encrypted"/>
Unlock via the lock icon, then encrypted fields decrypt for you; when locked they show ********. Use Encrypt / Re-wrap Data to encrypt pre-existing data or to grant a newly added reader access to it.
Limitations
- Encrypted values cannot be searched, sorted or grouped at the DB level.
- Background cron has no browser key; sensitive computes must run interactively while unlocked (a guard raises a clear error rather than computing wrong).
- Zero-Knowledge mode blocks server-side decryption entirely, so it is only for systems where every sensitive field is client mode.
- Back up the master recovery key โ losing every recipient key means permanent data loss (the nature of encryption).
Support
Questions, bug reports and feature requests: vuhaiqn90@gmail.com (please include your Odoo version and whether the field is server or client mode).
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module