Unfortunately, groupAllow does not check up the inheritance chain, as it is possible to give multiple levels access to the same command (with different restrictions, or even with a deny somewhere between the two groups).
I'm not sure if this is the most optimized approach (given that XGUI was a separate entity from ULX when I originally wrote all of this), but here's how XGUI does it:
XGUI starts with a list of access tags that is populated from the server, and sent down to admins who have access to the groups tab.
https://github.com/TeamUlysses/ulx/blob/master/lua/ulx/xgui/server/sv_groups.lua#L290-L300Then, once a group is selected on the groups tab clientside, I iterate through each access to determine whether or not it has direct access, or inherited access (since I make a distinction in the UI for both cases). The helper methods I created to check that are here:
https://github.com/TeamUlysses/ulx/blob/master/lua/ulx/xgui/groups.lua#L586-L608.. But basically, for you to use this method, you would need to loop through each access you care about, then make a recursive function that checks a given group for access, and if it doesn't have access, then run the function again with the groups' inherited group, until there isn't one. (Note: this method does not factor in denies at all)