Control de usuarios

260 views
Skip to first unread message

Alex Correa

unread,
Jun 13, 2026, 12:48:00 PMJun 13
to Comunidad de Visual Foxpro en Español
Alguien cuenta con formulario de control de usuarios?
Message has been deleted

RS “Ricardo”

unread,
Jun 15, 2026, 12:33:42 PMJun 15
to Comunidad de Visual Foxpro en Español
¿Como Control de Usuarios? 
Un Login ?
Si es así haces un form con 2 Textbox y 2 botones para aceptar y salir  donde el Usuario pone su Login y contraseña
en el botón aceptar buscas en la tabla usuario el login y verificas que la clave exista 
Eventualmente puedes tener la clave encriptada en la tabla y la desencriptación  en el form

Adjunto funciones de encriptado  desencriptado 
Function Encriptar()
Lparameters dato
Local Z, pass2,car_A,codigo_A,CLAVECITAR
CLAVECITAR=''
Z=0
pass2=''
car_A=''
codigo_A=''
*clave='%ü&/@#$A'
Store "%ü&/@#$A" To CLAVECITAR
For Z=1 To Len(dato)
car_A=Substr(dato,Z,1)
pos_i=Mod(Z-1,(Len(CLAVECITAR)))+1
codigo_A=Substr(CLAVECITAR,pos_i,1)
st=Bitxor(Asc(codigo_A),Asc(car_A))
pass2=pass2+Right("0"+Dec2Base(st,16),2)
Next
Return(pass2)

*-------------------------------------------------------------
* FUNCTION DesEncriptar()
*-------------------------------------------------------------
* recibe un string y lo Desencripta deacuerdo a la CLAVECITAR
* PARAMETROS:
*    dato: string a transformar
*
* USO: encriptar(dato)
* RETORNA: Caracter
*-------------------------------------------------------------
Function DesEncriptar()
Lparameters dato
Local I,J, pass2,car,codigo,CLAVECITAR
I=0
J=0
pass2=''
car=''
codigo=''
*CLAVECITAR='%ü&/@#$A'
Store "%ü&/@#$A" To CLAVECITAR
J=1
For I=1 To Len(dato) Step 2
car=Substr(dato,I,2)
pos_i=Mod((J-1),Len(CLAVECITAR))+1
codigo=Substr(CLAVECITAR,pos_i,1)
des=Alltrim(Str(Base2Dec(car,16)))
pass2=pass2+Chr((Bitxor(Asc(codigo),Val(des))))
J=J+1
Next
Return(pass2)

Alex Correa

unread,
Jun 16, 2026, 2:14:06 PMJun 16
to Comunidad de Visual Foxpro en Español
Controles de usuarios: Crear, administrar, asignar o quitar roles...

Edwin Duran

unread,
Jun 16, 2026, 2:18:04 PMJun 16
to Comunidad de Visual Foxpro en Español

RS “Ricardo”

unread,
Jun 16, 2026, 3:21:24 PMJun 16
to Comunidad de Visual Foxpro en Español
Ok Comprendo
Yo administro eso de la siguiente forma:
Tabla: Tab Usuarios  
Campos 
Id  Pk Int Not nULL
Usuario VarChar(25) NOT NULL
Id_tab_perfiles int not null 

Tabla Tab_Perfiles
Campos
Id Pk Int Not null
Perfil varchar(50) && Administrador, Cajero, Bodeguero, Secretaria ...etc

Tabla  Tab_procesos 
Campos
Int PK int not null 
Proceso varchar(50)  &&aca identifico cada proceso al cual voy a controlarle el acceso por Ejemplo 
                                       && Actualiza Saldo de Cuenta Corriente
                                        && Actualiza Saldo de Stock, etc
Tabla Tab_Autorizaciones
Campos
Id Pk Int not null
Id_Perfiles int not null
Id_Proceso
Acceso_total Bit not null
Leer Bit not null
escribir not null
borrar bit not null

Y el codigo que administra todo es asi: Se pasa como parametros el id_Usuario y la Descripcion del proceso que quiero verificar si el usuario tiene o no el acceso 
ej ver_permiso (2, "Actualiza Saldo de Cuenta Corriente")

Esto en caso de tablas dbf

* ------------------------------------------------
* DETERMINA SI EL USUARIO PUEDE EJECUTAR UN PROCESO O CUENTA CON AUTORIZACION
* USO: VER_PERMISO(ID_USUARIO,PROCESO)
* RETORNA: RET SI PUEDE O NO (T/F)
* ------------------------------------------------

Function ver_permiso(m.id_usuario,m.proceso)
If Pcount() != 2
Messagebox("No se puede determinar si puede hacer el cambio porque falta un parametro",0,"Atencion")
Else
Local ret
ret=.F. &&asumo que no puedo
Select id From TAB_PROCESOS ;
WHERE Upper(Alltrim(procesos)) = Upper(Alltrim(m.proceso)) ;
INTO Cursor MI_PROC
If _Tally = 1 &&DEBE EXISTIR SINO NO ENTRA NO MAS
Select tab_usuario.id , tab_autorizaciones.acceso_total, tab_autorizaciones.escribir  ,;
       tab_autorizaciones.leer, tab_autorizaciones.borrar ,tab_autorizaciones.id_proceso;
FROM tab_usuario;
INNER Join tab_autorizaciones On tab_usuario.Id_Perfil = tab_autorizaciones.Id_Perfil ;
WHERE tab_usuario.id = M.id_usuario And tab_autorizaciones.id_proceso = MI_PROC.ID_PROCESOS;
INTO Cursor MI_AUTORIZAC
*BROW
If _Tally != 0
Select MI_AUTORIZAC
Go Top
If MI_AUTORIZAC.acceso_total = .T. Or (MI_AUTORIZAC.leer = .T. Or MI_AUTORIZAC.escribir = .T.)
ret=.T.
Else
Msg="USTED NO PUEDE "+Alltrim(Upper(M.proceso))
Centrado(Msg,2)
Endif
Else
Msg="NO ENCONTRE AUTORIZACION PARA EVALUAR "+Alltrim(Upper(M.proceso))
Centrado(Msg,2)
Endif
Else
Centrado("AVISE AL ADMINISTRADOR PUES EL PROCESO NO ESTA DEFINIDO",2)
Endif
Endif
Retu(ret)

Para acceso a sql Server (uso la libreria Foxydb)
Igual paso como parametros el id Perfil del usuario y id del proceso 

Function pide_autorizacion(m.Id_Perfil,m.id_proceso)
Store .F.To m.acceso_total,m.leer,m.escribir,m.borrar
TEXT TO _sql_Tab_Autorizaciones TEXTMERGE PRETEXT 7 NOSHOW
       SELECT TOP 1  TAB_AUTORIZACIONES.ACCESO_TOTAL,TAB_AUTORIZACIONES.LEER,
        TAB_AUTORIZACIONES.ESCRIBIR,TAB_AUTORIZACIONES.BORRAR from TAB_AUTORIZACIONES
        WHERE ID_PROCESO = <<m.id_proceso>> and id_perfil = <<m.Id_Perfil>>
ENDTEXT
oDb.Sql(_sql_Tab_Autorizaciones , "Tab_autorizaciones","Tab_autorizaciones")
If Reccount('tab_autorizaciones') = 1 && solo debe haber un proceso por perfil
Select tab_autorizaciones
m.acceso_total=tab_autorizaciones.acceso_total
m.leer=tab_autorizaciones.leer
m.escribir=tab_autorizaciones.escribir
m.borrar=tab_autorizaciones.borrar
Endif
Return

Esta función busca el id del proceso que quiero verificar 

* nombre   :Busca_proceso
* Objetivo :Buscar un Proceso y rescatar el id
* Parametro:Descripcion del proceso
* Devuelve :EL Id_Proceso
FUNCTION busca_proceso(m.proceso)
*aca ver si tiene permiso y cargar el form
TEXT TO _sql_Tab_Procesos TEXTMERGE PRETEXT 7 NOSHOW
       SELECT  Tab_Procesos.id,Tab_Procesos.Procesos, Tab_Procesos.nom_Form
       from Tab_Procesos
       where Tab_Procesos.procesos  = <<m.proceso>>
ENDTEXT
oDb.Sql(_sql_Tab_Procesos , "Tab_Procesos","Tab_Procesos")
If Reccount("Tab_Procesos") = 0
centrado("No esta definido el Proceso ["+ m.proceso+ " ] , Avise al Soporte",2)
m.id_tab_procesos = 0
Else
m.id_tab_procesos = Tab_Procesos.id
Endif
RETURN (m.id_tab_procesos)

En cada Form defino como propiedades 
ACCESO_TOTAL  tipo logica  Leer Logica, Escribir Logica, Borrar Logica
de esa forma obtengo para cada uno de los procesos y perfil de usuario si puede leer, escribir Borrar

El martes, 16 de junio de 2026 a las 14:14:06 UTC-4, disso...@gmail.com escribió:

Reynaldo Bustillos Flores

unread,
Jun 17, 2026, 8:35:19 PMJun 17
to publice...@googlegroups.com
image.png
yo tengo este formulario para administrar mis usuarios y asignarles sus derechos de acceso...


--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/666d3d90-1ac4-4d05-9df7-a4b7e73079c3n%40googlegroups.com.

Zarlu

unread,
Jun 18, 2026, 10:27:22 AMJun 18
to Comunidad de Visual Foxpro en Español
Buenos días  dissoftware!

Te adjunto la imagen de un form bastante simple.
Encriptar y validar es importante para proteger la alteración  de permisos por algún usuario avezado o curioso.

En el ejemplo encripta/desencripta el contenido de codificado....
Para guardar, encripta las opciones tildadas
Para leer, si la opción existe tilda el check u otorga las facultades

Suerte
zarlu
Chetumal, Quintana Roo, México

Sin título.png
Reply all
Reply to author
Forward
0 new messages