Si ves que te funciona, por el momento puedes dejarlo así...
Entiendo lo que planteas, y si del modo en que lo indicas tal parece que no resulta ser demasiado complejo.
En todo caso, yo si lo he complicado
A tu modo, el modelo funciona bien. Y no veo que el método Can este mal. A una primera visión parece que se ajusta a lo que deseas.
No se si estás acostumbrado a UML, sino lo estás tal vez tener un pequeño panorama visual te haga ver algo que te está incomodando.
No conozco WordPress, y no creo que con mis escasos conocimientos en el área pueda entenderlo si le hecho una ojeada. Por ese lado no te sabría decir...
Te soy sincero, tengo que sentarme tranquilo a analizar bien en detalle esto de los permisos y roles. Si me das un tiempo puede que con un mejor análisis del problema encuentre otro razonamiento... pero para esto necesitaría conocer con mayores detalles tus clases, el problema, el dominio... y pues... esto puede que no venga al caso y no sea posible.
No te rompas demasiado la cabeza, si a tu parecer esto no amerita demasiada complejidad la simpleza de tu código es útil.
Se que no aporté demasiado... como te dije: tendría que estar en tu situación y analizar con mayores detalles para saber si el código generado necesita limpieza o no.
Si crees que te podamos ser de ayuda, y si lo ves oportuno y conveniente que tengamos acceso a una descripción más global del problema que te molesta pues aqui me tienes a mi. Aunque como sabes... yo de PHP apenas lo conozco pero en lo que es un análisis y diseño puede que te sea de ayuda.
Exitos...
Saludos,