--
--	VISION INFORMATICA S.A.
--	S.G.E. Sistema de gestion empresarial
--	Modulo de seguridad
--

create table seg_mnumod
(
  modid    number(4)    not null,
  modkey   char(4)      not null,
  owner    varchar2(32) not null,
  name     varchar2(32) not null,
  menufile varchar2(80),
  constraint seg_mnumod_pk
     primary key(modid),
  constraint seg_mnumod_uq unique(modkey, owner)
);

create table seg_mnumnu
(
  modid    number(4)    not null,
  itemid   number(6)    not null,
  name     varchar2(32) not null,
  label    varchar2(64) not null,
  constraint seg_mnumnu_pk
     primary key(modid, itemid)
);

create table seg_mnuitm
(
  modid    number(4)    not null,
  itemid   number(6)    not null,
  parentid number(6)    not null,
  name     varchar2(32) not null,
  label    varchar2(64) not null,
  refs     varchar2(32),
  jerid    number(6),
  constraint seg_mnuitm_pk
     primary key(modid, itemid)
);

--     Maestro de Grupos de Usuarios
Create  Table SEG_GRUPO
(
  COD_GRUPO	Varchar2(30)	Not Null 	
     Constraint SEG_GRUPO_PK Primary key,
  DES_GRUPO	Varchar2(30)	Not Null
);


--    Maestro de Usuarios
Create Table SEG_USUARIO
(
  COD_USUARIO	 Varchar2(30)	Not Null	
     Constraint SEG_USUARIO_PK Primary Key,
  DES_USUARIO	 Varchar2(30) 	Not Null
);


--  GRPUS:  Claves Asociadas a Grupos
Create Table SEG_GRPUSUARIO
(
  COD_GRUPO	   Varchar2(30)	Not Null,
  COD_USUARIO	   Varchar2(30)	Not Null,
  Constraint SEG_GRPUSUARIO_PK
     Primary Key (cod_grupo, cod_usuario)
);


-- SEGGR:   Derechos sobre opciones de Menues
Create Table SEG_GRANT
(
  MODID	       number(4)	Not Null,  -- Module ID
  ITEMID       number(6)	Not Null,  -- Menu Item ID
  PARENTID     number(6)	Not Null,  -- Menu ID
  COD_GRUPO    Varchar2(30)	Not Null,
  COD_CIA      CHAR(3)	        Not Null,
  COD_OPCION   Varchar2(40)	Not Null,
  IND_DERECHO  Char(1) 	Not Null  
     Constraint Seg_grant_ind_derecho_ck
     Check (ind_derecho in ('S','N')),
  Constraint SEG_GRANT_PK 
     Primary Key (MODID, ITEMID, COD_GRUPO, COD_CIA)
);


--    Tablas que utiliza cada forma (que llaman las opciones de menues)
Create Table Seg_Opcion
(
  Modid 	 Number(4)	   Not Null,
  ItemId         Number(6)         Not Null,
  Nom_Forma	 Varchar2(12)      Not Null,
  Nom_Tabla	 Varchar2(30)      Not Null,
  Ind_Privilegio Char(1)           Not Null
     Constraint Seg_Opcion_Ind_Privilegio_Ch
     Check (Ind_Privilegio In ('T','S')),
  Constraint Seg_Opcion_Pk 
     Primary Key (Modid, ItemId, Nom_Forma, Nom_Tabla)
);


create table segparametro
(  cia          char(3) not null,
   accmenufal   char(1) not null,
   constraint segparametro_pk primary key(cia)
);


alter table seg_mnumnu add constraint segmnumod_mnumnu_fk
   foreign key (modid) references seg_mnumod(modid);

alter table seg_mnuitm add constraint segmnumnu_mnuitm_fk
   foreign key (modid, parentid) references seg_mnumnu(modid, itemid);

alter table seg_grpusuario add constraint seggrupo_grpusuario_fk
   foreign key (cod_grupo) references seg_grupo(cod_grupo);
alter table seg_grpusuario add constraint segusuario_grpusuario_fk
   foreign key (cod_usuario) references seg_usuario(cod_usuario);

alter table seg_grant add Constraint GenCompania_Grant_fk
    foreign key (Cod_cia) References Gen_Compania (Cod_Cia);

alter table seg_grant add Constraint seg_grupo_Grant_fk
    foreign key (Cod_grupo) References Seg_grupo (Cod_grupo);

create index seggrant_grupo_idx on seg_grant(cod_grupo, cod_cia);
create index seggrant_cia_idx on seg_grant(cod_cia, cod_grupo);




