Another approach to complex requirements without spending a lot of time querying databases is to use bitmaps. A set of permissions can be expressed through a bitmap and all you need to do in code is to "decode" that to what you actually let the user do.
The downside to this approach is that it requires some planning and to maintain in code what mask retrieves what permission(s).
The downside to this approach is that it requires some planning and to maintain in code what mask retrieves what permission(s).