Permission на клиенте. Как реализуют профи?
На клиенте рисовать только доступные кнопки, с клиента периодически слать запрос на доступные кнопки + отдельная кнопка для обновления с клиента. Иметь возможность "пропихнуть" кнопки с сервера в дополнение к ответу на запрос. На сервере, естественно, проверять доступность функции.
Если же нам надо продать "недоступные кнопки", то их можно рисовать, но в задизэйбленом состоянии.
Я не профессионал, но решение для себя такое сделал.
Фронтенд хранит все формы, кнопки и тп. отображение интерфейса производится через проверку прав доступа.
Сервер на laravel, после авторизации возвращает меню + rbac пользователя. Интерфейс отрисовывается в зависимости от разрешений пользователя (permissions). При изменении списка разрешений, например администратором, отправляется обновлённый список ролей пользователю через websocket. Перестраивается интерфейс.
И на сервере всегда проверяю разрешено ли пользователю выполнять данное действие.