Your multiple inheritance problem is in your head - unless, of course, it can be in several faculties, etc. Create an additional "parent resource" that can change the ACL from the base "course".
You do not want the course to directly inherit the authority of the faculty; you probably want someone to edit courses for this faculty (TA or something else) - but not the faculty itself is right?
faculties, courses and events. each event belongs to the course, and each course to the faculty
Parent -> middleman -> child Courses -> Courses:Faculty2 -> Courses:Faculty2:Course1 Events -> Events:Course1 -> Events:Course1:Event3
etc.
This will give you groups of courses by faculty, but still inherit the default permissions for the course. When you add each resource, just make it the parent for your group resource, and which parents for the shared resource.
If you want all events for a particular course to be hidden, you simply set the permission to Event: Course #
If you want to set permission for all the events of the faculty, you can simply add another intermediary parent over the event: Course1, which also groups events by faculty: Events:Faculty2:Course1:Event3
I found for the permission system 9 times out of 10 you do not need (or want the confusion) multiple inheritance. If your access control is more complex than a simple tree, you should reevaluate your access control.
source share