I tested in both way, designer and full client instance. It looks very strange because if I use hasRole directly in the Alarm Status Table binding it works, but if I use in the client tag it has no effect.
I have the same issue, I have a Vision Client Tag "EnableSecurity" with an expression:
hasRole("Administrator") || hasRole("Engineer") || hasRole("Supervisor")
On a button .enable is tag [client]EnableSecurity
The button is enabled in the Designer but not in the Client instance (version 8.1.25)
Edit: This works correctly if referencing {[System]Client/User/RolesString} as Aiasa21 mentioned:
if((indexOf({[System]Client/User/RolesString}, "Administrator") >= 0) ||
(indexOf({[System]Client/User/RolesString}, "Engineer") >= 0) ||
(indexOf({[System]Client/User/RolesString}, "Supervisor") >= 0),true,false)