Your security architecture as described really does not make sense to me. As described, you might as well set the Org-Wide Default to Public, since that seems to be essentially what your sharing rule does. If your users have View All permission on the Case object, you certainly should just change the OWD to Public Read Only.
I suspect the real objective is something like this:
- Managers should be able to edit the records owned by the Employees who report to them (but not the Employees who don't report to them).
- Employees should be able to edit the records owned by their Manager (but not the other Managers, or other Employees).
Neither the Role Hierarchy nor Sharing Rule described will achieve this.
Access rolls up the Role Hierarchy, not the Reporting Hierarchy. This means that all users in the Manager role, which is above the Employee role, will have access to the records for all Employees.
Similarly, if you share Manager-owned records to Employees, all Employees will get access to the records of all Managers.
It's not clear what Record Types have to do with anything.
I see a couple of options here:
- Just set your Org-Wide Default to Read-Write, since you're most of the way there already.
- Divide your role hierarchy according to each sector that needs to roll up differently - i.e., Manager A -> Employee A, Manager B -> Employee B, and so for. Create one Sharing Rule for each grouping to share records owned by the Manager role to their corresponding Employee role. This will get unmaintainable depending on the scale.
- Use Apex-Managed Manual Sharing, since Apex Sharing per se is not available on standard objects. Last resort; it's tricky and harder to maintain and can be altered by users.
All of this assumes that users have Edit permission on the Case object.