I think your design is not a good one, because you will have to introduce new attributes with new names every time a new user group is invented. I think user groups are at the "instance" level rather than the "type" level, so their names should appear as values rather than names. That means coding it as
<visibility group="A" visible="true"/>
<visibility group="B" visible="false"/>
It's possible to process multiple attributes with related names using things like
section[@*[name()=$group and .='True']]
but it's a pretty messy approach.
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference