Managing data access through asymmetric cryptography
This is simple to do by combining symmetric and asymmetric encryption.

For example:


Generate data encryption key $s$.
Encrypt the data $d$ using symmetric algorithm $A$: $A_s(d)$.
Encrypt the symmetric key with the relevant parties public keys: $E_i(s)$.


The key can be per data field, or shared by various fields with equivalent permission requirements. When authorized requests access to the data, they would receive the encrypted symmetric key, be able to decrypt it and thus the data itself.

When you revoke access you have two options:


Only delete the encrypted symmetric key corresponding to that party.
Re-encrypt everything under a new symmetric key.


In the latter case you also prevent someone who has looked at the data earlier (and saved the symmetric key) from being able to decrypt the current version later. However, it can require more computation if the data is large.

As a compromise you could mark the data for re-encryption when next modified, under the assumption that since they had access they could already know the current value and must only be prevented from knowing future values.