On top of allowing only certain Roles to access certain Controller or Action, I would like to serve a slightly different HTML based on the roles.
Admin can see Edit
The solution you point to strikes me a very good one. A simpler (but perhaps harder to maintain) approach would be to pass a list of the user's roles has to the view (as a property of the model). In the view you would then have an if statement around the HTML displaying the button checking if the button should be displayed to the user.