-- 0029 — nivel de acesso na CHAVE de tenant
--
-- A 0028 pos o nivel na SESSAO do widget, que e o token efemero do navegador.
-- Faltava a outra ponta: a CHAVE, que fica no servidor do cliente e e quem
-- emite as sessoes.
--
-- Sem isto, qualquer chave de tenant pode emitir sessao 'admin' -- basta pedir,
-- ou nem pedir, porque e o padrao. Ou seja: o sistema do cliente, que so
-- precisa abrir conversas para os usuarios dele, carrega no servidor uma
-- credencial capaz de trocar a chave do provedor. Se esse servidor for
-- comprometido, o estrago passa de "leem os dados" para "trocam a conta que
-- paga o modelo".
--
-- Com o nivel na chave, o cliente pode ter duas:
--
--   admin  guardada com quem administra. Emite sessao de qualquer nivel.
--   user   a que o sistema dele usa no dia a dia. Alcanca todos os projetos
--          do tenant e NAO consegue emitir sessao administrativa -- nem
--          pedindo explicitamente.
--
-- O padrao e 'admin', e aqui isso NAO e o menor privilegio por descuido: e a
-- unica escolha que preserva o comportamento das chaves ja emitidas. Uma
-- migracao que rebaixasse chaves existentes quebraria integracoes em producao
-- sem aviso. Chave nova escolhe o nivel na criacao.
--
-- Vale so para chave de TENANT. Chave de projeto nunca administrou o
-- assistente, entao o nivel dela nao muda nada -- fica 'admin' por
-- uniformidade da coluna, e o alcance continua sendo o que a limita.

ALTER TABLE api_keys
  ADD COLUMN role VARCHAR(16) NOT NULL DEFAULT 'admin' AFTER scope;
