Implement this with the help of microflows. The permission on the microflow determines what role can trigger the flow. Then based on your enum you can decide to open the page as a NewEdit page or View page.
The standard option would be to use the domain model access control in combination with the entity xpath statements. By combining these you can decide if a user can write or read-only. When the record is associate to a record that can find the path to the user you should be able to implement this with default security of the platfom.