Table Design for Different Constituents
The "best practice" would be to use an RDBMS that supports row-level security so that you only need the one table.

Example:  Oracle Enterprise Edition users would use the Virtual Private Database [VPD] feature to enforce row-level security.

In Oracle Standard Edition, you could simulate VPD by using a VIEW with a WHERE clause that references a database session variable that is retrieved via SYS_CONTEXT() function.  But, it won't be as secure as VPD.

I don't know how to do it in other RDBMS systems.