Profile 2, user relation access? A hard one! The site contains 2 user types besides admin, lets call the 2 user types "Private" and "Corporate".

Private users have a "profile 2" type, where alot of different fields are filled.

In a view or likewise, "Corporate" users need the ability to search for users, and when they go to a users profile, ONLY a few fields should be visible - rest hidden.

Then when (Corporate user) viewing the (Private users) profile, they need a "button" or likewhise where they can ask for permission to view full profile.

Now the private user should recieve a mail that states a "Corporate user xxx" want to see their full profile. ONLY when the "Private" have accepted this, all fields should be visible, BUT ONLY to this ONE specific user of the "Corporate" role - not all other users with the "Corporate" role.

What modules can make this node/user access work?
Here is a zero code solution. 

Flag + Rules + Rules Block Visibility
 + Views

1 flag for "request" 

1 flag for "allow"

When "request" flag is flagged >> send e-mail with link to flagging user profile.

Then other person opens link and sees their profile and clicks the "allow" flag.

If user is listed in the Allowed flag list, then show View Block with the all the fields, if not, then show View block with limited fields.



Here is an indepth example to using Rules Block Visibility: How to stop a Views block from displaying to admins, such as user/1?