Department wise Permission

Hi,

We need to set up permission department wise. We have created an additional field in Department - Department Manager.
We would like department manager to see all leave approvals received from his department.
We would like the department manager to view the salary slip of all the employees under his department.
We have also created one additional field in Project called department. I would like department manager to see all projects under his department and access them but do not allow him to access other projects.

How can I set this up using user role, profile and permissions.