deals with very similar problems using special pre-computed caching tables in a MySQL database. These tables store the computed permissions for each object, taking into account inherited permissions from the category tree. When permissions change the cache tables are recomputed - this slows updates but provides good read performance.