30% OFF para compra e renovaÇÃo »

Autor Tópico: Aparentemente o módulo de segurança não funciona  (Lida 257 vezes)

mafranca

  • Iniciante
  • **
  • Mensagens: 58
    • Email
Aparentemente o módulo de segurança não funciona
« Online: Julho 05, 2018, 08:56:44 am »
Prezados,

Apliquei o módulo de segurança por grupo no meu projeto, porém, criar usuários, os grupos, dar permissão para cada grupo fazer as ações (via grid no Grupo/Aplicações), e após compilar tudo no projeto local não funciona, ou seja, nenhum bloqueio é feito, continua tudo liberado para todos os usuários e grupos. Após jogar na produção também segue do mesmo modo.

Existe alguma dica, opção ou algo que eu esteja esquecendo que deve ser feito para que o módulo possa funcionar corretamente?

Obrigado,

Clarck

  • Iniciante
  • **
  • Mensagens: 96
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #1 Online: Julho 05, 2018, 09:10:50 am »
Prezados,

Apliquei o módulo de segurança por grupo no meu projeto, porém, criar usuários, os grupos, dar permissão para cada grupo fazer as ações (via grid no Grupo/Aplicações), e após compilar tudo no projeto local não funciona, ou seja, nenhum bloqueio é feito, continua tudo liberado para todos os usuários e grupos. Após jogar na produção também segue do mesmo modo.

Existe alguma dica, opção ou algo que eu esteja esquecendo que deve ser feito para que o módulo possa funcionar corretamente?

Obrigado,

tens q ativar a segurança em cada uma das aplicações.
e configurar corretamente.

Anderson

  • Novato
  • *
  • Mensagens: 16
Re:Aparentemente o módulo de segurança não funciona
« Responder #2 Online: Julho 05, 2018, 12:27:32 pm »
Opa....  se você estiver se referindo ao ambiente de desenvolvimento é assim mesmo; depois que você publica e acessa direto o ambiente de produção, funciona certinho. (passei por isso qdo estava começando).

mafranca

  • Iniciante
  • **
  • Mensagens: 58
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #3 Online: Julho 05, 2018, 12:38:49 pm »
Olá Clarck  e Anderson,

Eu vou testar então, vou habilitar a segurança de todos os módulos, compilar e publicar. Vamos ver.

Valeu.

robertobru

  • Expert
  • *****
  • Mensagens: 531
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #4 Online: Julho 05, 2018, 12:47:17 pm »
Para aplicar a segurança nas aplicações em lote:

Menu;
Ferramentas;
Edição Expressa de Aplicações;
Selecionar as aplicações desejadas;
Usar Segurança.

Obvio se não souber disso.

Clarck

  • Iniciante
  • **
  • Mensagens: 96
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #5 Online: Julho 06, 2018, 11:12:17 am »
Olá Clarck  e Anderson,

Eu vou testar então, vou habilitar a segurança de todos os módulos, compilar e publicar. Vamos ver.

Valeu.

geralmente, dependendo das configurações do sc, acessar uma app em local(desenvolvimento)
vai ser permitido, diferentemente da produção onde é primeiro observado as permissões de acesso do usuario
conforme é cedido no registro do mesmo, juntamente à segurança da app definida na área de segurança individual dessa.

blz?

mafranca

  • Iniciante
  • **
  • Mensagens: 58
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #6 Online: Julho 08, 2018, 11:44:09 am »
Pois é parece fácil, mas quando funciona.

Eu publiquei com a segurança ativada porém todas as aplicações aparece como "Usuário não autorizado".

Fiz um teste, publiquei sem a segurança até onde eu consigo ir na sincronização das aplicações, porém apresenta erro.

Não sei o que fazer.



robertobru

  • Expert
  • *****
  • Mensagens: 531
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #7 Online: Julho 08, 2018, 02:28:39 pm »
Em produção, na segurança, você tem que liberar as aplicações para o usuário desejado, senão essa mensagem é exibida mesmo.

mafranca

  • Iniciante
  • **
  • Mensagens: 58
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #8 Online: Julho 10, 2018, 10:15:53 am »
Não funcionou.

Coloquei segurança nas aplicações, em produção apliquei os acessos nos grupos.
Tentei sincronizar para ver se faltava isso, mas aparece 0 sincronizadas.

E não funcionou.

Thyago Brasil

  • Expert
  • *****
  • Mensagens: 1318
  • Crê no Senhor Jesus e será salvo tu e tua família
    • www.brasdesign.com.br
Re:Aparentemente o módulo de segurança não funciona
« Responder #9 Online: Julho 10, 2018, 10:22:01 am »
Não funcionou.

Coloquei segurança nas aplicações, em produção apliquei os acessos nos grupos.
Tentei sincronizar para ver se faltava isso, mas aparece 0 sincronizadas.

E não funcionou.


Depois de sincronizar as aplicações vc precisa libera-las no grupo x aplicações.
Thyago Brasil
Desenvolvedor Web
Site: http://www.brasdesign.com.br

SC 8.1 SC 9

ilanocf

  • Intermediário
  • ***
  • Mensagens: 214
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #10 Online: Julho 10, 2018, 11:20:09 am »
Gente, é o seguinte. Eu não usei a segurança do SC não. Optei por fazer da seguinte maneira:

Crie as tabelas:

Citar
CREATE TABLE `B001_PERFIS` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `NOME` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  `ABAINICIAL` VARCHAR(50) COLLATE utf8_general_ci NOT NULL,
  `DESBLOQUEIA` INTEGER(11) NOT NULL DEFAULT 0,
  PRIMARY KEY USING BTREE (`ID`),
  UNIQUE KEY `NOMEPERFIL` USING BTREE (`NOME`)
) ENGINE=InnoDB;


CREATE TABLE `B002_USUARIOS` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `IDCOLIGADA` INTEGER(10) UNSIGNED NOT NULL,
  `IDPERFFIL` INTEGER(10) UNSIGNED NOT NULL,
  `IDPESSOA` INTEGER(10) UNSIGNED DEFAULT NULL,
  `NOME` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  `LOGIN` VARCHAR(50) COLLATE utf8_general_ci NOT NULL,
  `SENHA` VARCHAR(80) COLLATE utf8_general_ci NOT NULL,
  `EMAIL` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  `ATIVO` INTEGER(10) NOT NULL,
  `AVATAR` BLOB,
  `ALTERARSENHA` INTEGER(11) NOT NULL DEFAULT 0,
  PRIMARY KEY USING BTREE (`ID`),
  UNIQUE KEY `PERFILUSUARIO` USING BTREE (`IDCOLIGADA`, `IDPERFFIL`, `EMAIL`),
  KEY `IDPERFIL` USING BTREE (`IDPERFFIL`),
  CONSTRAINT `B002_USUARIOS_ibfk_1` FOREIGN KEY (`IDPERFFIL`) REFERENCES `B001_PERFIS` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB;

CREATE TABLE `B003_ARQUIVOS` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `NOME` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY USING BTREE (`ID`),
  UNIQUE KEY `NOMEARQUIVO` USING BTREE (`NOME`)
) ENGINE=InnoDB;

CREATE TABLE `B004_MODULOS` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `IDARQUIVO` INTEGER(10) UNSIGNED DEFAULT NULL,
  `TIPO` INTEGER(10) UNSIGNED DEFAULT NULL COMMENT '1 = AUXILIARES; 2 = CADASTROS; 3 = CONSULTAS; 4 = RELATÓRIOS; 5 = UTILITÁRIOS',
  `NOME` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  `ORDEM` INTEGER(10) UNSIGNED NOT NULL,
  `ITEMMENU` INTEGER(10) UNSIGNED NOT NULL,
  `ICONE` BLOB,
  `NOMEIMAGEM` VARCHAR(80) COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY USING BTREE (`ID`)
) ENGINE=InnoDB;

CREATE TABLE `B005_PERMISSOES` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `IDMODULO` INTEGER(10) UNSIGNED NOT NULL,
  `IDPERFIL` INTEGER(10) UNSIGNED NOT NULL,
  `TIPO` INTEGER(10) UNSIGNED DEFAULT NULL,
  `INCLUIR` INTEGER(10) UNSIGNED DEFAULT 0,
  `ALTERAR` INTEGER(10) UNSIGNED DEFAULT 0,
  `EXCLUIR` INTEGER(10) UNSIGNED DEFAULT 0,
  `FILTRAR` INTEGER(10) UNSIGNED DEFAULT 0,
  `EXPORTAR` INTEGER(10) UNSIGNED DEFAULT 0,
  `ATIVAR` INTEGER(10) UNSIGNED DEFAULT NULL,
  `ORDEM` INTEGER(10) UNSIGNED NOT NULL,
  PRIMARY KEY USING BTREE (`ID`),
  UNIQUE KEY `PERFILPERMISSAO` USING BTREE (`TIPO`, `IDMODULO`, `IDPERFIL`),
  KEY `B005_PERMISSOES_FKIndex1` USING BTREE (`IDPERFIL`),
  KEY `B005_PERMISSOES_FKIndex2` USING BTREE (`IDMODULO`),
  CONSTRAINT `B005_PERMISSOES_ibfk_1` FOREIGN KEY (`IDPERFIL`) REFERENCES `B001_PERFIS` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `B005_PERMISSOES_ibfk_2` FOREIGN KEY (`IDMODULO`) REFERENCES `B004_MODULOS` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB;


Depois criei a biblioteca abaixo do tipo Projeto (validarPermissao.php) para ser usada em todas as aplicações, exceto aquelas que serão de domínio público. As linhas que estão comentadas é porque ainda estão em modo de desenvolvimento, quando for pra produção removo os comentários das linhas de comando.

Citar
/*
   Modo de uso:
   1. Vá na aplicação;
   2. Vá na aba Programação;
   3. Clique em Bibliotecas Internas;
   4. Selecione a opção com o nome validarPermissao.php;
   5. Vá na aba Formulário;
   6. Clique na pasta Eventos;
   7.  Inclua a linha validaaplicacao(); nos eventos OnLoad de controles e formulários e OnHeader de consultas;
   8. Salve a aplicação.
   ***** Sempre que alterar esta biblioteca, você precisará gerar novamente o código fonte de todas as aplicações que fizerem a chamada desta.
   ***** As linhas em vermelho, são para registrar no banco os nomes das aplicações que serão abertas em fase de teste. Assim, não precisarei cadastrar os nomes manualmente e nos módulos apenas seto cada aplicação e dou um nome para ser apresentado no menu. As linhas seguintes já fazem os testes do perfil.

*/

   function VerificaPerfil()
   {
      $codusuario = [vlUsuario];
      $sql = "SELECT ID, LOGIN, ATIVO FROM B002_USUARIOS
            WHERE ID = $codusuario";
      sc_lookup(Ds, $sql);
      if(!empty({Ds}))
      {
         if({Ds[0][2]} == 0)
         {
            sc_redir(login);
         }
      } else
         if(empty({Ds}))
         {
            sc_redir(login);
         };
   };
   

   function validaaplicacao()
   {
   
      /*$arquivo = explode(DIRECTORY_SEPARATOR, __FILE__);
      $nome = end($arquivo);*/

      $nomeapl = $this->Ini->nm_cod_apl;
      $titulo = $this->Ini->nm_nome_apl;
      $perfil = [vlPerfil];
      
      VerificaPerfil();
      
      $sql = "SELECT NOME FROM B003_ARQUIVOS WHERE NOME = '$nomeapl';";
      
      $cmd = "INSERT INTO B003_ARQUIVOS (NOME) VALUES ('$nomeapl');";
      
      sc_lookup(dsDados, $sql);
      if(empty({dsDados}))
      {
         sc_exec_sql($cmd);
      };



      $sql2 = "SELECT C.NOME,
            A.INCLUIR, A.ALTERAR,
            A.EXCLUIR, A.FILTRAR, A.EXPORTAR, A.ATIVAR, A.ORDEM
            FROM B005_PERMISSOES A
            INNER JOIN B004_MODULOS B ON (B.ID = A.IDMODULO)
            INNER JOIN B003_ARQUIVOS C ON (C.ID = B.IDARQUIVO)
            WHERE C.NOME = '$nomeapl'
            AND A.IDPERFIL = $perfil;";

      sc_lookup(dsDados2, $sql2);
      
      if(!empty({dsDados2}))
      {
         /* DESCOMENTAR A LINHA ABAIXO QUANDO FINALIZAR O PROJETO. TEM OUTRA LINHA DESSA NO FINAL DO CÓDIGO */
         /*if({dsDados2[0][6]} = 0) {sc_redir(acessonegado, pagina=$nomeapl);};*/
         
         if({dsDados2[0][1]} = 1) {sc_btn_display ('new','on');} else {sc_btn_display ('new','off');};
         if({dsDados2[0][1]} = 1) {sc_btn_display ('BtnNovo','on');} else {sc_btn_display ('BtnNovo','off');};
         if({dsDados2[0][1]} = 1) {sc_btn_display ('BtnSalvar','on');} else {sc_btn_display ('BtnSalvar','off');};
         if({dsDados2[0][1]} = 1) {sc_btn_display ('BtnAlterar','on');} else {sc_btn_display ('BtnAlterar','off');};
         if({dsDados2[0][1]} = 1) {sc_btn_display ('insert','on');} else {sc_btn_display ('insert','off');};
         if({dsDados2[0][2]} = 1) {sc_btn_display ('update','on');} else {sc_btn_display ('update','off');};
         if({dsDados2[0][3]} = 1) {sc_btn_display ('delete','on');} else {sc_btn_display ('delete','off');};
         if({dsDados2[0][3]} = 1) {sc_btn_display ('ok','on');} else {sc_btn_display ('ok','off');};
         if({dsDados2[0][3]} = 1) {sc_btn_display ('BtnExecutarSQL','on');} else {sc_btn_display ('BtnExecutarSQL','off');};
         if({dsDados2[0][3]} = 1) {sc_btn_display ('BtnDesbloqueia','on');} else {sc_btn_display ('BtnDesbloqueia','off');};
         
         if({dsDados2[0][4]} = 1) {
            sc_btn_display ('filter','on');
            sc_btn_display ('dynsearch','on');
            sc_btn_display ('qsearch','on');
         } else
            {
               sc_btn_display ('filter','off');
               sc_btn_display ('dynsearch','off');
               sc_btn_display ('qsearch','off');
            };
         
         if({dsDados2[0][5]} = 1) {
            sc_btn_display ('filter','on');
            sc_btn_display ('print','on');
            sc_btn_display ('pdf','on');
            sc_btn_display ('det_pdf','on');
            sc_btn_display ('xls','on');
            sc_btn_display ('xml','on');
            sc_btn_display ('cvs','on');
            sc_btn_display ('rtf','on');
            sc_btn_display ('word','on');
            sc_btn_display ('summary','on');
            sc_btn_display ('BtnImprimir','on');
         } else
            {
               sc_btn_display ('filter','off');
               sc_btn_display ('print','off');
               sc_btn_display ('pdf','off');
               sc_btn_display ('det_pdf','off');
               sc_btn_display ('xls','off');
               sc_btn_display ('xml','off');
               sc_btn_display ('cvs','off');
               sc_btn_display ('rtf','off');
               sc_btn_display ('word','off');
               sc_btn_display ('summary','off');
               sc_btn_display ('BtnImprimir','off');
            };
      } else
         if(empty({dsDados2}))
         {
            sc_btn_display ('new','off');
            sc_btn_display ('BnNovo','off');
            sc_btn_display ('BnSalvar','off');
            sc_btn_display ('insert','off');
            sc_btn_display ('ok','off');
            sc_btn_display ('BtnExecutarSQL','off');
            sc_btn_display ('BtnAlterar','off');
            sc_btn_display ('update','off');
            sc_btn_display ('delete','off');
            sc_btn_display ('filter','off');
            sc_btn_display ('dynsearch','off');
            sc_btn_display ('qsearch','off');
            sc_btn_display ('filter','off');
            sc_btn_display ('print','off');
            sc_btn_display ('pdf','off');
            sc_btn_display ('det_pdf','off');
            sc_btn_display ('xls','off');
            sc_btn_display ('xml','off');
            sc_btn_display ('cvs','off');
            sc_btn_display ('rtf','off');
            sc_btn_display ('word','off');
            sc_btn_display ('summary','off');
            sc_btn_display ('BtnImprimir','off');
            sc_btn_display ('BtnDesbloqueia','off');
            
            sc_btn_display ('facebook','off');
            sc_btn_display ('twitter','off');
            sc_btn_display ('google','off');
            sc_btn_display ('paypal','off');
            
            sc_btn_display ('first','off');
            sc_btn_display ('back','off');
            sc_btn_display ('forward','off');
            sc_btn_display ('last','off');

            /* DESCOMENTAR A LINHA ABAIXO APÓS CONCLUIR O PROJETO */
            /*sc_redir(acessonegado, pagina=$nomeapl);*/
         };
         
};


E, finalmente, na aplicação de menu, no evento OnLoad:

Citar
sc_appmenu_reset(menu);
sc_appmenu_create(menu);

$perfil = [vlPerfil];
$i = -1;

$sql1 = "SELECT ID, CONCAT('<b>', UPPER(NOME), '</b>') AS NOME, ICONE,
      CASE WHEN NOMEIMAGEM IS NOT NULL THEN
      CONCAT('../_lib/img/sys__NM__bg__NM__', NOMEIMAGEM) ELSE '' END AS IMAGEM
      FROM B004_MODULOS
      WHERE TIPO IS NULL AND (IDARQUIVO IS NULL OR IDARQUIVO = 0)
      AND ID IN (SELECT DISTINCT TIPO
      FROM B005_PERMISSOES
      WHERE IDPERFIL = $perfil AND ATIVAR = 1)
      ORDER BY TIPO, ORDEM; ";

sc_lookup(dsmodulos, $sql1);

sc_appmenu_add_item('menu','item_0',, 'INÍCIO','',catid='0';catname='inicio', , , );

foreach({dsmodulos} as $arr_modulo)
{
    $i = $i + 1;
   $icone1 = base64_encode({dsmodulos[0][2]});
   $img1 = {dsmodulos[0][3]};
   
   sc_appmenu_add_item('menu','item_'.$arr_modulo[0],, $arr_modulo[1],'',catid=$arr_modulo[0];catname=$arr_modulo[1], $icone1, , );
   
   
   $sql2 = "SELECT A.ID, B.NOME, C.NOME, A.IDPERFIL, A.IDMODULO, B.ICONE,
         CASE WHEN B.NOMEIMAGEM IS NOT NULL THEN
         CONCAT('../_lib/img/sys__NM__bg__NM__', B.NOMEIMAGEM) ELSE '' END AS IMAGEM
          FROM B005_PERMISSOES A
          INNER JOIN B004_MODULOS B ON (B.ID = A.IDMODULO)
          INNER JOIN B003_ARQUIVOS C ON (C.ID = B.IDARQUIVO)
          WHERE B.TIPO = ".$arr_modulo[0]." AND B.ITEMMENU = 1
          AND A.IDPERFIL = $perfil AND A.ATIVAR = 1
          ORDER BY B.TIPO, B.ORDEM; ";
   
   sc_lookup(dspermissao,$sql2);
       
        /* A única coisa que não está funcionando neste código é a exibição da imagem no menu. */
       
   if(!empty({dspermissao}))
   foreach({dspermissao} as $arr_permissao)
   {
      $icone2 = base64_encode({dspermissao[0][5]});
      $img2 = {dspermissao[0][6]};
      sc_appmenu_add_item('menu',
                     'item_'.$arr_modulo[0].$arr_permissao[0],
                     'item_'.$arr_modulo[0],
                     $arr_permissao[1],
                     $arr_permissao[2],
                     prodid=$arr_permissao[0],
                     "$icone2", "", "");
   };
   
};

$i=$i + 1;
sc_appmenu_add_item('menu', $i, '', '<b>SAIR</b>', 'deslogar', '', '', '', '_parent');



Pode melhorar? Com certeza! E, sinceramente, espero que a partir desse modelo a galera aqui possa dar um retorno de como é possível melhorar mais rrrrsssss.... Bom, essa foi a saída que encontrei pra fugir do padrão SC. Não sei o que acharão da ideia, mas pra mim está funcionando.

Espero ter ajudado e contribuído para uma ideia maior.
« Última modificação: Julho 10, 2018, 11:42:32 am por ilanocf »

mafranca

  • Iniciante
  • **
  • Mensagens: 58
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #11 Online: Julho 10, 2018, 04:44:17 pm »
ilanocf

É bem interessante sua proposta, porém, meio complexa. Para mim um esquema de login que habilita os itens do menu de acordo com o grupo já estaria bom.

O módulo de segurança no meu caso não está funcionando, fiz de tudo, já faz um bom tempo que estou trabalhando com o SC, sei que estou falando.

Abs

Haroldo

  • Expert
  • *****
  • Mensagens: 8555
  • Conhecimento diminui limitações.△TFA△
    • InfinitusWeb Software de Gestãol/Gestão ITIL/Consultoria Scriptcase
Re:Aparentemente o módulo de segurança não funciona
« Responder #12 Online: Julho 10, 2018, 04:53:54 pm »
A sugestão mantém insegura toda a questão de acessos as aplicações pois exige que estas estejam sem segurança habilitada e apenas escondem do menu as que não devem ser acessadas.
Nada contra um módulo de segurança próprio, eu mesmo desenvolvi o meu. Mas deve-se assegurar a segurança quando ao acesso direto as aplicações ou ao manuseio de variáveis em sessão maliciosos dando pleno acesso a usuários indesejados.
Por isso sugiro a habilitação da segurança em todas aplicações excluindo o login e  uso da macro:

https://www.scriptcase.com.br/docs/pt_br/v81/macros-scriptcase/macros-scriptcase.htm#sc_apl_status

para sua devida e correta liberação para acesso.


Gente, é o seguinte. Eu não usei a segurança do SC não. Optei por fazer da seguinte maneira:

Crie as tabelas:

Citar
CREATE TABLE `B001_PERFIS` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `NOME` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  `ABAINICIAL` VARCHAR(50) COLLATE utf8_general_ci NOT NULL,
  `DESBLOQUEIA` INTEGER(11) NOT NULL DEFAULT 0,
  PRIMARY KEY USING BTREE (`ID`),
  UNIQUE KEY `NOMEPERFIL` USING BTREE (`NOME`)
) ENGINE=InnoDB;


CREATE TABLE `B002_USUARIOS` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `IDCOLIGADA` INTEGER(10) UNSIGNED NOT NULL,
  `IDPERFFIL` INTEGER(10) UNSIGNED NOT NULL,
  `IDPESSOA` INTEGER(10) UNSIGNED DEFAULT NULL,
  `NOME` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  `LOGIN` VARCHAR(50) COLLATE utf8_general_ci NOT NULL,
  `SENHA` VARCHAR(80) COLLATE utf8_general_ci NOT NULL,
  `EMAIL` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  `ATIVO` INTEGER(10) NOT NULL,
  `AVATAR` BLOB,
  `ALTERARSENHA` INTEGER(11) NOT NULL DEFAULT 0,
  PRIMARY KEY USING BTREE (`ID`),
  UNIQUE KEY `PERFILUSUARIO` USING BTREE (`IDCOLIGADA`, `IDPERFFIL`, `EMAIL`),
  KEY `IDPERFIL` USING BTREE (`IDPERFFIL`),
  CONSTRAINT `B002_USUARIOS_ibfk_1` FOREIGN KEY (`IDPERFFIL`) REFERENCES `B001_PERFIS` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB;

CREATE TABLE `B003_ARQUIVOS` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `NOME` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY USING BTREE (`ID`),
  UNIQUE KEY `NOMEARQUIVO` USING BTREE (`NOME`)
) ENGINE=InnoDB;

CREATE TABLE `B004_MODULOS` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `IDARQUIVO` INTEGER(10) UNSIGNED DEFAULT NULL,
  `TIPO` INTEGER(10) UNSIGNED DEFAULT NULL COMMENT '1 = AUXILIARES; 2 = CADASTROS; 3 = CONSULTAS; 4 = RELATÓRIOS; 5 = UTILITÁRIOS',
  `NOME` VARCHAR(100) COLLATE utf8_general_ci NOT NULL,
  `ORDEM` INTEGER(10) UNSIGNED NOT NULL,
  `ITEMMENU` INTEGER(10) UNSIGNED NOT NULL,
  `ICONE` BLOB,
  `NOMEIMAGEM` VARCHAR(80) COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY USING BTREE (`ID`)
) ENGINE=InnoDB;

CREATE TABLE `B005_PERMISSOES` (
  `ID` INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `IDMODULO` INTEGER(10) UNSIGNED NOT NULL,
  `IDPERFIL` INTEGER(10) UNSIGNED NOT NULL,
  `TIPO` INTEGER(10) UNSIGNED DEFAULT NULL,
  `INCLUIR` INTEGER(10) UNSIGNED DEFAULT 0,
  `ALTERAR` INTEGER(10) UNSIGNED DEFAULT 0,
  `EXCLUIR` INTEGER(10) UNSIGNED DEFAULT 0,
  `FILTRAR` INTEGER(10) UNSIGNED DEFAULT 0,
  `EXPORTAR` INTEGER(10) UNSIGNED DEFAULT 0,
  `ATIVAR` INTEGER(10) UNSIGNED DEFAULT NULL,
  `ORDEM` INTEGER(10) UNSIGNED NOT NULL,
  PRIMARY KEY USING BTREE (`ID`),
  UNIQUE KEY `PERFILPERMISSAO` USING BTREE (`TIPO`, `IDMODULO`, `IDPERFIL`),
  KEY `B005_PERMISSOES_FKIndex1` USING BTREE (`IDPERFIL`),
  KEY `B005_PERMISSOES_FKIndex2` USING BTREE (`IDMODULO`),
  CONSTRAINT `B005_PERMISSOES_ibfk_1` FOREIGN KEY (`IDPERFIL`) REFERENCES `B001_PERFIS` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `B005_PERMISSOES_ibfk_2` FOREIGN KEY (`IDMODULO`) REFERENCES `B004_MODULOS` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB;


Depois criei a biblioteca abaixo do tipo Projeto (validarPermissao.php) para ser usada em todas as aplicações, exceto aquelas que serão de domínio público. As linhas que estão comentadas é porque ainda estão em modo de desenvolvimento, quando for pra produção removo os comentários das linhas de comando.

Citar
/*
   Modo de uso:
   1. Vá na aplicação;
   2. Vá na aba Programação;
   3. Clique em Bibliotecas Internas;
   4. Selecione a opção com o nome validarPermissao.php;
   5. Vá na aba Formulário;
   6. Clique na pasta Eventos;
   7.  Inclua a linha validaaplicacao(); nos eventos OnLoad de controles e formulários e OnHeader de consultas;
   8. Salve a aplicação.
   ***** Sempre que alterar esta biblioteca, você precisará gerar novamente o código fonte de todas as aplicações que fizerem a chamada desta.
   ***** As linhas em vermelho, são para registrar no banco os nomes das aplicações que serão abertas em fase de teste. Assim, não precisarei cadastrar os nomes manualmente e nos módulos apenas seto cada aplicação e dou um nome para ser apresentado no menu. As linhas seguintes já fazem os testes do perfil.

*/

   function VerificaPerfil()
   {
      $codusuario = [vlUsuario];
      $sql = "SELECT ID, LOGIN, ATIVO FROM B002_USUARIOS
            WHERE ID = $codusuario";
      sc_lookup(Ds, $sql);
      if(!empty({Ds}))
      {
         if({Ds[0][2]} == 0)
         {
            sc_redir(login);
         }
      } else
         if(empty({Ds}))
         {
            sc_redir(login);
         };
   };
   

   function validaaplicacao()
   {
   
      /*$arquivo = explode(DIRECTORY_SEPARATOR, __FILE__);
      $nome = end($arquivo);*/

      $nomeapl = $this->Ini->nm_cod_apl;
      $titulo = $this->Ini->nm_nome_apl;
      $perfil = [vlPerfil];
      
      VerificaPerfil();
      
      $sql = "SELECT NOME FROM B003_ARQUIVOS WHERE NOME = '$nomeapl';";
      
      $cmd = "INSERT INTO B003_ARQUIVOS (NOME) VALUES ('$nomeapl');";
      
      sc_lookup(dsDados, $sql);
      if(empty({dsDados}))
      {
         sc_exec_sql($cmd);
      };



      $sql2 = "SELECT C.NOME,
            A.INCLUIR, A.ALTERAR,
            A.EXCLUIR, A.FILTRAR, A.EXPORTAR, A.ATIVAR, A.ORDEM
            FROM B005_PERMISSOES A
            INNER JOIN B004_MODULOS B ON (B.ID = A.IDMODULO)
            INNER JOIN B003_ARQUIVOS C ON (C.ID = B.IDARQUIVO)
            WHERE C.NOME = '$nomeapl'
            AND A.IDPERFIL = $perfil;";

      sc_lookup(dsDados2, $sql2);
      
      if(!empty({dsDados2}))
      {
         /* DESCOMENTAR A LINHA ABAIXO QUANDO FINALIZAR O PROJETO. TEM OUTRA LINHA DESSA NO FINAL DO CÓDIGO */
         /*if({dsDados2[0][6]} = 0) {sc_redir(acessonegado, pagina=$nomeapl);};*/
         
         if({dsDados2[0][1]} = 1) {sc_btn_display ('new','on');} else {sc_btn_display ('new','off');};
         if({dsDados2[0][1]} = 1) {sc_btn_display ('BtnNovo','on');} else {sc_btn_display ('BtnNovo','off');};
         if({dsDados2[0][1]} = 1) {sc_btn_display ('BtnSalvar','on');} else {sc_btn_display ('BtnSalvar','off');};
         if({dsDados2[0][1]} = 1) {sc_btn_display ('BtnAlterar','on');} else {sc_btn_display ('BtnAlterar','off');};
         if({dsDados2[0][1]} = 1) {sc_btn_display ('insert','on');} else {sc_btn_display ('insert','off');};
         if({dsDados2[0][2]} = 1) {sc_btn_display ('update','on');} else {sc_btn_display ('update','off');};
         if({dsDados2[0][3]} = 1) {sc_btn_display ('delete','on');} else {sc_btn_display ('delete','off');};
         if({dsDados2[0][3]} = 1) {sc_btn_display ('ok','on');} else {sc_btn_display ('ok','off');};
         if({dsDados2[0][3]} = 1) {sc_btn_display ('BtnExecutarSQL','on');} else {sc_btn_display ('BtnExecutarSQL','off');};
         if({dsDados2[0][3]} = 1) {sc_btn_display ('BtnDesbloqueia','on');} else {sc_btn_display ('BtnDesbloqueia','off');};
         
         if({dsDados2[0][4]} = 1) {
            sc_btn_display ('filter','on');
            sc_btn_display ('dynsearch','on');
            sc_btn_display ('qsearch','on');
         } else
            {
               sc_btn_display ('filter','off');
               sc_btn_display ('dynsearch','off');
               sc_btn_display ('qsearch','off');
            };
         
         if({dsDados2[0][5]} = 1) {
            sc_btn_display ('filter','on');
            sc_btn_display ('print','on');
            sc_btn_display ('pdf','on');
            sc_btn_display ('det_pdf','on');
            sc_btn_display ('xls','on');
            sc_btn_display ('xml','on');
            sc_btn_display ('cvs','on');
            sc_btn_display ('rtf','on');
            sc_btn_display ('word','on');
            sc_btn_display ('summary','on');
            sc_btn_display ('BtnImprimir','on');
         } else
            {
               sc_btn_display ('filter','off');
               sc_btn_display ('print','off');
               sc_btn_display ('pdf','off');
               sc_btn_display ('det_pdf','off');
               sc_btn_display ('xls','off');
               sc_btn_display ('xml','off');
               sc_btn_display ('cvs','off');
               sc_btn_display ('rtf','off');
               sc_btn_display ('word','off');
               sc_btn_display ('summary','off');
               sc_btn_display ('BtnImprimir','off');
            };
      } else
         if(empty({dsDados2}))
         {
            sc_btn_display ('new','off');
            sc_btn_display ('BnNovo','off');
            sc_btn_display ('BnSalvar','off');
            sc_btn_display ('insert','off');
            sc_btn_display ('ok','off');
            sc_btn_display ('BtnExecutarSQL','off');
            sc_btn_display ('BtnAlterar','off');
            sc_btn_display ('update','off');
            sc_btn_display ('delete','off');
            sc_btn_display ('filter','off');
            sc_btn_display ('dynsearch','off');
            sc_btn_display ('qsearch','off');
            sc_btn_display ('filter','off');
            sc_btn_display ('print','off');
            sc_btn_display ('pdf','off');
            sc_btn_display ('det_pdf','off');
            sc_btn_display ('xls','off');
            sc_btn_display ('xml','off');
            sc_btn_display ('cvs','off');
            sc_btn_display ('rtf','off');
            sc_btn_display ('word','off');
            sc_btn_display ('summary','off');
            sc_btn_display ('BtnImprimir','off');
            sc_btn_display ('BtnDesbloqueia','off');
            
            sc_btn_display ('facebook','off');
            sc_btn_display ('twitter','off');
            sc_btn_display ('google','off');
            sc_btn_display ('paypal','off');
            
            sc_btn_display ('first','off');
            sc_btn_display ('back','off');
            sc_btn_display ('forward','off');
            sc_btn_display ('last','off');

            /* DESCOMENTAR A LINHA ABAIXO APÓS CONCLUIR O PROJETO */
            /*sc_redir(acessonegado, pagina=$nomeapl);*/
         };
         
};


E, finalmente, na aplicação de menu, no evento OnLoad:

Citar
sc_appmenu_reset(menu);
sc_appmenu_create(menu);

$perfil = [vlPerfil];
$i = -1;

$sql1 = "SELECT ID, CONCAT('<b>', UPPER(NOME), '</b>') AS NOME, ICONE,
      CASE WHEN NOMEIMAGEM IS NOT NULL THEN
      CONCAT('../_lib/img/sys__NM__bg__NM__', NOMEIMAGEM) ELSE '' END AS IMAGEM
      FROM B004_MODULOS
      WHERE TIPO IS NULL AND (IDARQUIVO IS NULL OR IDARQUIVO = 0)
      AND ID IN (SELECT DISTINCT TIPO
      FROM B005_PERMISSOES
      WHERE IDPERFIL = $perfil AND ATIVAR = 1)
      ORDER BY TIPO, ORDEM; ";

sc_lookup(dsmodulos, $sql1);

sc_appmenu_add_item('menu','item_0',, 'INÍCIO','',catid='0';catname='inicio', , , );

foreach({dsmodulos} as $arr_modulo)
{
    $i = $i + 1;
   $icone1 = base64_encode({dsmodulos[0][2]});
   $img1 = {dsmodulos[0][3]};
   
   sc_appmenu_add_item('menu','item_'.$arr_modulo[0],, $arr_modulo[1],'',catid=$arr_modulo[0];catname=$arr_modulo[1], $icone1, , );
   
   
   $sql2 = "SELECT A.ID, B.NOME, C.NOME, A.IDPERFIL, A.IDMODULO, B.ICONE,
         CASE WHEN B.NOMEIMAGEM IS NOT NULL THEN
         CONCAT('../_lib/img/sys__NM__bg__NM__', B.NOMEIMAGEM) ELSE '' END AS IMAGEM
          FROM B005_PERMISSOES A
          INNER JOIN B004_MODULOS B ON (B.ID = A.IDMODULO)
          INNER JOIN B003_ARQUIVOS C ON (C.ID = B.IDARQUIVO)
          WHERE B.TIPO = ".$arr_modulo[0]." AND B.ITEMMENU = 1
          AND A.IDPERFIL = $perfil AND A.ATIVAR = 1
          ORDER BY B.TIPO, B.ORDEM; ";
   
   sc_lookup(dspermissao,$sql2);
       
        /* A única coisa que não está funcionando neste código é a exibição da imagem no menu. */
       
   if(!empty({dspermissao}))
   foreach({dspermissao} as $arr_permissao)
   {
      $icone2 = base64_encode({dspermissao[0][5]});
      $img2 = {dspermissao[0][6]};
      sc_appmenu_add_item('menu',
                     'item_'.$arr_modulo[0].$arr_permissao[0],
                     'item_'.$arr_modulo[0],
                     $arr_permissao[1],
                     $arr_permissao[2],
                     prodid=$arr_permissao[0],
                     "$icone2", "", "");
   };
   
};

$i=$i + 1;
sc_appmenu_add_item('menu', $i, '', '<b>SAIR</b>', 'deslogar', '', '', '', '_parent');





Pode melhorar? Com certeza! E, sinceramente, espero que a partir desse modelo a galera aqui possa dar um retorno de como é possível melhorar mais rrrrsssss.... Bom, essa foi a saída que encontrei pra fugir do padrão SC. Não sei o que acharão da ideia, mas pra mim está funcionando.

Espero ter ajudado e contribuído para uma ideia maior.
« Última modificação: Julho 10, 2018, 05:16:24 pm por Haroldo »

ilanocf

  • Intermediário
  • ***
  • Mensagens: 214
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #13 Online: Julho 10, 2018, 05:14:09 pm »
Huuummmm!!! Valeu Haroldo, vou fazer testes e melhorar minhas aplicações.

mafranca

  • Iniciante
  • **
  • Mensagens: 58
    • Email
Re:Aparentemente o módulo de segurança não funciona
« Responder #14 Online: Julho 10, 2018, 05:22:33 pm »
Haroldo e ilanocf

Vocês poderiam colocar um exemplo básico aqui com login e as macros para que eu possa seguir no caminho das pedras...

abs