Criar um form de permissões dos usuarios?

Delphi

19/10/2008

Pessoal, preciso fazer algo tipo assim, tenho um form aonde tem alguns usuarios cadastrados, e o administrador vai impor as empresas que os usuarios poderão acessar, quero marcar as empresas num dbgrid usando um checkbox dentro do dbgrid, mais houve um problema que não consegui resolver.

Quero que ao clicar no dbgrid do usuario mostrar no outro dbgrid das empresas todas empresas, mais também mostrar quais estão com o checkbox marcado para aquele usuario. Isso é um form que apenas o administrador tem acesso.

E não esta dando certo a minha idéia.
[img]http://adrianoservitec.fotos.net.br/album1/photo.html[/img]

[url]http://adrianoservitec.fotos.net.br/album1/photo.html[/url]

Estava pensando num select com um subselect assim
select a.marcar_check, a.nmempresa,
(select distinct( b.idempresa ) from permissoesuser b
          where b.idempresa = a.cdempresa ) idempresa
from empresa a


Mais não deu resultado, acho que não estou sabendo como criar este form de permissões.

Criei as tabelas assim no firebird 2.0
CREATE TABLE EMPRESA (
    CDEMPRESA            INTEGER NOT NULL,
    NMEMPRESA            VARCHAR(60) NOT NULL,
    NMFANTASIA           VARCHAR(60),
    DSATIVIDADE          VARCHAR(50),
    DSENDERECO           VARCHAR(60),
    NMBAIRRO             VARCHAR(40),
    NMCIDADE             VARCHAR(50) NOT NULL,
    NRCEP                VARCHAR(10) NOT NULL,
    CDUF                 VARCHAR(2) NOT NULL,
    NRTELEFONE           VARCHAR(14),
    NRINSCRMUNICIPAL     VARCHAR(20),
    NRREGCARTORIO        VARCHAR(20),
    NRJUNTACOMERCIAL     VARCHAR(30),
    VLCAPITAL            NUMERIC(15,2),
    DTINICIOATIVIDADE    DATE,
    NRCGC                VARCHAR(18),
    DTFIMATIVIDADE       DATE,
    OBS                  BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    NMEMAIL              VARCHAR(50),
    TIPOCALCIR           CHAR(1),
    CODNATUREZAJURIDICA  VARCHAR(10),
    CDCNAE               VARCHAR(10),
    IDRESPONSAVEL        INTEGER,
    RESPONSAVELEMPRESA   VARCHAR(60),
    CPFRESPONSAVEL       VARCHAR(18),
    RGRESPONSAVEL        VARCHAR(20),
    TELRESPONSAVEL       VARCHAR(14),
    CELRESPONSAVEL       VARCHAR(14),
    EMAILRESPONSAVEL     VARCHAR(50),
    MARCAR_CHECK         CHAR(1),
    ID_USUARIO           INTEGER
);


CREATE TABLE USUARIOS (
    ID_USUARIO       INTEGER NOT NULL,
    USUARIO          VARCHAR(10) NOT NULL,
    SENHA            VARCHAR(35) NOT NULL,
    NIVEL            CHAR(1) NOT NULL,
    EXPIRAEM         DATE,
    GRUPO            VARCHAR(30),
    ADM              CHAR(1),
    ALTERARSENHA     CHAR(1),
    NAOEXPIRA        CHAR(1),
    IDEMPRESA        INTEGER,
    RESPONSAVEL      VARCHAR(50),
    FUNCAO           VARCHAR(30),
    CPFRESP          VARCHAR(14),
    TELEFONECONTATO  VARCHAR(14),
    EMAILRESP        VARCHAR(60),
    PRIVILEGIO       CHAR(1)
);

CREATE TABLE PERMISSOESUSER (
    IDPERMISSOES        INTEGER NOT NULL,
    IDUSUARIO           INTEGER NOT NULL,
    IDEMPRESA           INTEGER NOT NULL,
    DATAHORA_MOVIMENTO  TIMESTAMP
);




/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE PERMISSOESUSER ADD CONSTRAINT PK_PERMISSOESUSER PRIMARY KEY (IDPERMISSOES);


/******************************************************************************/
/****                             Foreign Keys                             ****/
/******************************************************************************/

ALTER TABLE PERMISSOESUSER ADD CONSTRAINT FK_PERMISSOESUSER_2 FOREIGN KEY (IDEMPRESA) REFERENCES EMPRESA (CDEMPRESA) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE PERMISSOESUSER ADD CONSTRAINT FK_PERMISSOESUSER_3 FOREIGN KEY (IDUSUARIO) REFERENCES USUARIOS (ID_USUARIO) ON DELETE CASCADE ON UPDATE CASCADE;


E fiz uma SP assim
CREATE PROCEDURE PERMISSOESUSER_IU (
    idpermissoes integer,
    idusuario integer,
    idempresa integer)
as
begin
  if (exists(select * from permissoesuser where (idempresa = :idempresa
              and idusuario = :idusuario ))) then
    update permissoesuser
    set idempresa = :idempresa,
        idusuario = :idusuario
    where (idempresa = :idempresa and idusuario = :idusuario);
  else
    insert into permissoesuser (
        idpermissoes,
        idempresa,
        idusuario
        )
    values (
        :idpermissoes,
        :idempresa,
        :idusuario
        );
end^

Não esta nada funcionando como eu queria, qualquer ajuda é bem vinda, obrigado.

Adriano.


Adriano_servitec

Adriano_servitec

Curtidas 0

Respostas

Adriano_servitec

Adriano_servitec

19/10/2008

Pessoal, consegui gerar o select correto para o que eu preciso

select a.marcar_check,
       a.nmempresa,
       b.idempresa,
       b.idusuario
from empresa a
     left join permissoesuser b ON (a.cdempresa = b.idempresa)


Muito obrigado, problema resolvido.


GOSTEI 0
POSTAR