I have an app that have multiple users. In my app an user can - create contacts (people) - edit contacts - view contacts - create an entry to agenda - view entry from agenda
Also I need that User A is allowed to view User's B contacts but is not allowed to edit that contact.
User B can view and edit User's A entries in Agenda. The app will have about 10-15 permission for each module (Agenda, Contacts, Documents, EmailMarketing) and the number of modules can reach to about 20
Let's say "User A" is a sales person, and "User B" is the sales manager.
For sure, each Business Object (contact, agenda entry,etc) will have a owner id.
What is the best approach/design patter/good practice to use to handle this situation?