Controle só no cliente
Esconder um botão ou uma opção no navegador não tranca a rota por trás; o servidor ainda responde.
É comum a interface esconder o que o usuário não deveria usar: o botão "exportar tudo" só aparece para admin, o menu de staff some para o membro comum. Isso é bom para a experiência, mas não é segurança. O código que roda no navegador está nas mãos do usuário: ele vê o código, abre as Ferramentas de Desenvolvedor e, principalmente, pode chamar a rota na mão.
O botão escondido dispara algo como fetch('/api/members/export'). Se o servidor não checa o papel nessa rota, qualquer um faz o mesmo pedido com curl e recebe a resposta, botão ou não:
curl https://portal.querencia.test/api/members/export
A regra: o navegador decide o que mostrar; o servidor decide o que permitir. Esconder um controle no cliente é enfeite por cima de uma checagem que tem que existir no servidor. Em Python, é o erro de controlar só o template ({% if is_admin %}) e deixar a view sem @admin_required.