Made OWD for Contact as Private and defined 2 criteria based sharing rules
If brand = abc.. share this contact with Role A and its subordinates
If brand = def.. share this contact with Role B and its subordinates (There are no other workflows or record types on contact)
Did the same for account. It worked perfectly. But for contact unable to get this working. I, as a system admin created a contact with brand = abc, logged in as user under one of the role of Role A, but unable to view this contact.
Please note that contacts will have no accounts populated