В этой ситуации вы всегда должны спросить себя:
Имеет ли это действие смысл вне контекста этого приложения.
Если это так, то он принадлежит модели. В противном случае он принадлежит контроллеру. Голосование за пост - это концепция, которая существует вне контекста вашего приложения, поэтому логика для нее должна оставаться в модели.
Я думаю, что публикация в / topic / 1 / голосования для создания голоса звучит довольно разумно, и это то, что большинство людей сделали бы.
Альтернативой является разрешение запроса PUT на / topic / 1 / голосование / имя пользователя (или его разновидность). Это, возможно, более информативно, чем пост, и должно соответствовать спецификации HTTP для PUT. Вам, конечно, нужно проверить имя пользователя, вошедшего в систему, по имени пользователя в URL.