AFAIK, hasrole is literally checking that the authenticated user has the given Role; it does not use the Gate, so the before gate is never checked in this context. The @can directive (which checks permissions) would work as you are expecting.
You are working against the recommended approach for the package which suggests that you should be authorizing against permissions, not roles.