By assigning a role to a user in a context, you are granting them the permissions contained in that role, for the current context and all "lower" contexts.
Contexts:
So for example, if you grant a Student role to a user in a Course, they will have that role for the course, but also all Blocks and Activities inside that course. Their actual permissions may depend on other roles and overrides that have been defined.
See also Roles, Contexts, Permissions and Overrides.