The best way to understand why the concept of dynamic roles is important, is through an example. Say a company wants to enforce a policy that only project managers should be able to add tasks to their projects i.e. if Joe and Mary are project managers of projects P1 and P2 respectively, then Joe should be able to add tasks to P1 but not to P2 while Mary should be able to add tasks to P2 and not P1. If we define a role called Project Manager and assign it to Joe and Mary, then Joe would still be able to perform the "Add Task" operation on P2. This is because when users are assigned a non-dynamic role, they play that role irrespective of the objects on which they are performing the operation. What is desired is that Joe be assigned the Project Manager role when he is performing operations on projects he is managing and not when he is accessing projects managed by others. Dynamic roles do exactly this.
Dynamic roles are roles that are assigned to users automatically by the system based on the context of the operation the user is trying to perform. Privileges can be assigned to dynamic roles, just like you can assign them to non-dynamic roles.
The following dynamic roles are defined:
If a user is accessing a resource that is in a project (e.g. details, tasks, emails, project documents), and if the user is the manager, he/she is assigned the role project manager.
If a user is accessing a resource that is in a project (e.g. details, tasks, emails, project documents), and if the user is part of the project team, he/she is assigned the role project team member.
Every user plays this role. When you add a user, the user automatically plays this role. This is useful when you want to give privileges to everybody.