MDL-60983 get_user_capability_course: fix buggy edge cases
authorTim Hunt <T.J.Hunt@open.ac.uk>
Wed, 6 Dec 2017 19:40:38 +0000 (19:40 +0000)
committerTim Hunt <T.J.Hunt@open.ac.uk>
Thu, 7 Dec 2017 18:28:18 +0000 (18:28 +0000)
commit91c8d8b130de0cbfddaa7d4685454bab84102fae
tree44397f38b5ab191d9eb233b57855a925386ce81c
parent5f54a8760f2821c12bd90beaa37b9fa937f101e6
MDL-60983 get_user_capability_course: fix buggy edge cases

There were basically two problems, which are demostrated by
the new test users u7 and u8 in the unit test.

1. There was a problem if a role was overridden in a context above the
one where it was assigned. E.g. User has teacher role in a course, and
there is a role override in the course-category context. That was being
ignored.

2. Problems with the handling of PROHIBITs. It should be the case that
if there is a PROHIBIT in force, then it cannot be overridden by another
role, or by a role override. However, this was not working in all cases.

Also, I had to add comments to the unit test so that I could understand
it. Hopefully these will be hepful to other developers too.
lib/classes/access/get_user_capability_course_helper.php
lib/tests/accesslib_test.php