13. Repository Cache Lessons Learned Using MongoDB to represent graph structures (commit graph, commit trees) requires careful query planning. Pointer-chasing is no fun! Sometimes Ming validation and ORM overhead can be prohibitively expensive – time to drop down a layer. Benchmarking and profiling are your friends, as are queries like {‘_id’: {‘$in’:[…]}} for returning multiple objects
14.
15. Authorization: ProjectRole Objects Roles can be named roles (“Groups”) or user proxies. Roles inherit all permissions of the roles they can “act as” User membership in a group is stored on the user proxy object (the list of roles for which the user has permission) Authorization checks all roles transitively for a user. If any role has the appropriate permission being required, then access is granted. Hierarchical role structures are supported, but not exposed in the UI.