-- 0028 — os dois niveis de acesso de uma sessao de tenant
--
-- Uma sessao de TENANT alcanca todos os projetos do grupo, e quem a recebe pode
-- ser uma de duas pessoas bem diferentes:
--
--   admin  o administrador do grupo. Consulta tudo E administra o assistente:
--          provedor, modelo, chave.
--   user   alguem que precisa da visao consolidada e nada alem dela. Consulta
--          os mesmos dados e NAO configura.
--
-- Substitui a coluna can_configure da 0027. A troca nao e cosmetica: um flag
-- solto responde "pode fazer X?", e a cada permissao nova nasceria outra
-- coluna, cada uma podendo ser esquecida em algum caminho de emissao. O nivel
-- responde "quem e esta pessoa?", e as permissoes passam a ser consequencia --
-- ha um lugar so onde decidir, e ele tem nome.
--
-- O padrao e 'user', o nivel mais restrito. Uma sessao que chega sem dizer o
-- nivel nao pode ganhar acesso administrativo por omissao; quem quer admin
-- pede admin, ou abre a sessao com escopo de tenant, onde o padrao e admin
-- (ver EmbedService::openSession).
--
-- Sessao de PROJETO e sempre 'user': ali quem esta do outro lado e um cliente
-- final, e a conta no provedor nao e dele.

ALTER TABLE embed_sessions
  ADD COLUMN role VARCHAR(16) NOT NULL DEFAULT 'user' AFTER can_correct;

-- Preserva o que ja foi emitido: quem podia configurar era, por definicao, o
-- administrador.
UPDATE embed_sessions SET role = 'admin' WHERE can_configure = 1;

ALTER TABLE embed_sessions
  DROP COLUMN can_configure;
