In my opinion, can() is better when we want to check permission to do something, but checking entire role also makes sense in some cases. For instance, if we want to display entire dashboard area, it sometimes more sense to show/hide it through roles instead of checking individual permissions, which in theory are more dynamic.
I mean situation when each role has their own dashboards. I understand your point and I agree that permission-driven system is better in most cases, just like feature checking is better than browser checking. But there are exceptions. Adding artificial permissions (like view_editor_dashboard) just to follow this rule is not the greatest idea. As well as checking multiple permissions to guess what is the user's context.