Hey there,
I have been working with the TeamSpeak permissions system for over 12 years and I really like it. Sure, it’s not easy to get started, but it’s not as difficult as everyone always says. Once you understand the basic principle that permissions either have values that are compared with each other or true/false flag permissions, you actually have all the basics you need. This is because it is identical across server groups, client permissions, channel permissions, channel groups and channel client permissions. Each of these has unique use cases and is useful to have.
The order is Server Group < Client Perm < Channel Perm < Channel Group < Channel Client Perm. For example, if a user has a server group with 50 kick power and in their channel Test A they have channel client perm with kick power of 75, this overrides the 50 kick power of the server group!
Regarding your point about inheriting channel groups, this happens by default. If you create Channel A with Subchannel B and assign the channel group Admin to a new user in Channel A, then they will also be Admin in Subchannel B. There is also a special permission to stop inheritance: ‘b_channel_group_inheritance_end’.
For even more complicated things, you can then use skip and negate:
Skip
The “Skip” parameter can be set within the “Server Groups” and “Client Permissions” category only.
When selected, the “Client Permissions” or “Server Groups” permissions cannot be modified by the “Channel Groups” and “Channel” permissions.
Negate
The “Negate” parameter can be set within the Server Groups category only. When selected, the Server Group permission will check the same permission in other permission categories (“Channel Groups”, “Client Permissions” etc.) for the least greatest return value. (FALSE=0 or n<=x). This means that no single permission category has overwrite power stronger than the other categories, instead the category with the least return value will be selected as the dominant permission.