Prezados, gostaria de levantar uma questão sobre segurança para discussão, caso alguém se interesse e queira ler um textão. Antes que alguém taque pedra, sim, pode ser um erro meu. Não descarto isto pq é um projeto novo, recente e que não usa o módulo de segurança padrão e nem as aplicações de menu do SC.
Criei uma aplicação de consulta, habilitei segurança. Vou chamar ela de grid2 aqui.
Não cadastrei a aplicação na tabela de aplicações, portanto não dei nenhuma permissão e, por consequência, ela nem passa na rotina de liberação para execução no login (sc_apl_status).
Pra não deixar dúvida, eu executo no onScriptInit do login as macros:
sc_reset_apl_status();
sc_reset_apl_conf();
sc_reset_global( para todas as globais criadas e posteriormente alimentadas pelo login );
Ao tentar chamar esta aplicação diretamente no navegador sem uma sessão previamente realizada (mesmo que eu habilite chamada direta pela url) a aplicação dá “Usuário não autorizado”, e isto está correto, pois ela tem segurança habilitada. Comportamento padrão.
Eu não estou usando aplicação de menu como falei (menu antigo ou menu responsivo) padrão do SC. Fiz o meu próprio menu dinâmico em aplicação blank, então não sei se isto pode influenciar. Eu penso que não.
Como eu não cadastrei a grid2 na tabela de aplicações, obviamente, ela não é carregada no menu, então não dá pra chamar ela diretamente como consulta. Mesmo já estando logado (com sessão ativa), não adianta chamar pela url tb, mesmo “Permitir chamada direta pela URL” estando habilitado e isso é um ponto positivo.
No meu módulo de segurança (que também não é o nativo do sc), se eu cadastrar a grid2 e não der permissão direta pro usuário nem pro perfil do usuário, ela recebe sc_apl_status(‘grid2’, ‘off’). Só um adendo, meu login é neurótico e dá sc_apl_status(…, ‘off’) para todas que não tem permissão e, também, para todas que nem estão cadastradas mas existem em disco. Sim, eu faço uma varredura e comparo com a tabela de aplicações pra descobrir o que está boiando em disco).
A questão é que só de colocar a grid2 como subconsulta, em uma consulta que está devidamente cadastrada e com permissão pro meu usuário/perfil, a grid2 é executada (mostrando todos os registos). Eu não cadastrei a aplicação, forcei sc_apl_status(‘grid2’, ‘off’) e sc_apl_conf(‘grid2’, ‘access’, ‘off’) e, só por estar no disco, ela abre como subconsulta.
Ou a grid2 está usando a permissão da consulta pai (permit-overrides?), ou há uma possível falha na segurança, pois como falei, ela não está cadastrada e não recebeu um sc_apl_status(‘grid2’, ‘on’). Neste caso, ela recebeu forçadamente um sc_apl_status(‘grid2’, ‘off’) e eu registro isto num log.txt em disco pra ter certeza do que falo.
Enfim, mesmo forçando sc_apl_status(‘grid2’, ‘off’) e sc_apl_conf(‘grid2’, ‘access’, ‘off’), ela abre como subconsulta do mesmo jeito.
É fácil pensar que se não abre direto pela url, se não aparece no menu, mas está como subconsulta de uma consulta pai que o usuário recebe permissão de acesso, o usuário deveria ver seu conteúdo MAS, EU, penso que não deveria. No MEU entendimento, se não houve liberação de fato, não deveria haver acesso de forma nenhuma (deny-overrides).
Agora um cenário hipotético:
Crio uma aplicação pro setor financeiro da empresa, com consulta e várias subconsultas.
Setor de contabilidade pede acesso, mas não posso permitir que uma das subconsultas seja visualizada. Aí não tem pra onde correr, terei que clonar a consulta retirando a subconsulta de dentro dela. Ficarei com 2 apls praticamente idênticas por conta dessa permissão automática que o SC dá.
Vendo isto acontecer, fui testar a mesma coisa com form mestre/detalhe e, se eu negar a permissão do detalhe, ele aparece como “Usuário não autorizado”. Por que pro form detalhe há regra de segurança e pra subconsulta não? Apenas visualização também é uma questão de segurança dos dados.
Comecei a usar o SC na v4, em 2009, e nunca me atentei pra isto, até agora.
Isto é assim desde a v4 ou é algo que surgiu recentemente?
Alguém quer opinar?
Caso alguém use o módulo de segurança padrão do SC e puder testar, eu agradeço.
Abraço a todos.