La seguridad de saber quién es quién
El Perpetuo Novato de la Entrada de Registro #5.2
Este artículo apareció por primera vez en http://www.undu.com
Una versión anterior de este artículo apareció a principios de Febrero 00. Algunas correcciones, un poco juicioso de edición y mejor organización de esperar que como resultado algo mejor para usted, el lector.
Recientemente, me encontré sin una aplicación de inicio de sesión de componente. Obligados por las circunstancias a crear uno para al menos temporal de utilización, encontré la experiencia bastante interesante que he pensado que me gustaría tomar una carrera en la escritura de un ómnibus artículo para que mis compañeros novatos. Tenga cuidado temporal de una secuencia un poco más abajo!
Un formulario de inicio de sesión no es siempre el signo de una programación paranoico. Honestamente, yo utilice el formulario de inicio de sesión para averiguar quién está usando la aplicación, por lo que me pueden pillar las entradas y de las ediciones con un identificador. Si usted necesita una gran seguridad en el componente o nivel de menú, salir ahora y echa un vistazo de pleno derecho, como los sistemas de la UIL Sistema de Seguridad. Pero si se ejecuta una sola aplicación con un par de usuarios a los que queremos diferenciar, o si usted quiere tener un 'poco de seguridad,' leer.
Lectores recordarán que tiendo a comprar mis soluciones en lugar de re-inventar. Para la seguridad y un muy ingenioso formulario de inicio de sesión, he preferido Kalliopi del SecurityGuard sistema. Mientras que el uso de Delphi 3, me pareció que para ser fácil de instalar, fácil de usar y muy potente. Lamentablemente, no hay en Delphi 5 versión de la misma. Aunque me habría de ser el primero en la fila cuando salió, mi última información es que nunca va a suceder. Sooooo, yo tenía que tener un sistema de login que tomó ventaja de las grandes cosas que había llegado a esperar de SecurityGuard. Tenía que tener una pantalla de inicio de sesión y un medio para extraer información acerca de la seguridad del usuario y los niveles de otros diversos info, tales como preferencias (que yo podía hacer esto a través de la INI/archivos de Registro, pero que es mucho más fácil ponerlo en la tabla de seguridad, ya que algunos usuarios migrar de un ordenador a otro).
Dada mi necesidad temporal de un inicio de sesión, decidí limitar mi ambiciones y de trabajo en que el nombre y el nivel de seguridad de la información en la aplicación. Empecé con el diseño de la tabla de seguridad, lo que yo llamo PAZWORDZ. La tabla debe incluir un campo para el nombre de usuario (con llave), la contraseña y cualquier otra información que usted considere apropiado.
APLICACIÓN: Nomenclatura de los Campos
En la creación de su propia versión de una tabla de seguridad, pero sea cual sea el nombre, considere la posibilidad de una advertencia. No abuse de su derecho a los campos de nombre de lo que quieras. Hace muchos años, yo era parte de la primera operación para combinar Paradoja para los DOS, Interbase y peer-to-peer networking. Borland dijo que no se podía hacer en el momento, pero nos hizo ... después hemos corregido un montón de nombres de problemas.
& nbsp descubrí, entonces, que los espacios, guiones bajos y los signos de puntuación están MAL, mal, MAL en los nombres de campo. Como todos los demás en el momento, yo estaba muy emocionado de sacudirse el yugo de la limitada dBase nombres y seres Paradoja de la capacidad de uso de nombres que se ejecutó en y en y en y en. Era el equivalente de un escritorio nuevo usuario de la publicación de averiguar acerca de las fuentes y de su abundancia. O cuando por primera vez W95 usuarios descubierto el final de nombre de archivo 8.3 de la tiranía. Se volvió loca. Para mí, fue de nombres de campo. Mi mayor crimen fue de nombres de campo como de Teléfono de# o del Cliente Razones. Interbase odiaba ESOS nombres. Así que, tuvimos que volver a hacer la estructura de las bases de datos de Paradox y luego se fue a pesar de que el código del programa (varias decenas de miles de líneas) de buscar y reemplazar esos nombres. NUNCA de nuevo.
Bueno, nunca es mucho tiempo. La primera vez que fui construyendo mi de seguridad de las tablas, he utilizado simple de los nombres de los campos. Sin pensar, me hizo el nombre del usuario del NOMBRE del campo. Fecha de inicio se convirtió en la FECHA. Hubo un par de faltas de otros, pero usted consigue la deriva. Estos nombres de campo no morderme hasta que yo necesitaba para utilizar algunos de SQL. A continuación, los nombres se convirtió en la causa por el esfuerzo extra. Si el nombre del campo se ve como un posible nombre de la propiedad, o incluso PODRÍA ser un nombre de propiedad, CAMBIO!. Hacerlo ahora, en la fase creativa, y usted será mucho más feliz más tarde. Hacer nombre de Usuario y StartDate. Si usted no desea caso sensibles a los campos, a continuación, asegúrese de auto-tapa de los campos de nombre y contraseña. Por último, no te olvides de proteger con contraseña el producto final y para grabar la contraseña. Es un descuido que he sido culpable.
SEGUE.
En hacerme un formulario de inicio de Sesión. Empecé con el Delphi formulario de Contraseña. He copiado la etiqueta y el cuadro de edición para la contraseña para crear una etiqueta para el nombre de usuario y una caja de edición. Algunas de las maniobras de las etiquetas, cajas y botones me dio el tradicional formulario de inicio de sesión con el nombre de usuario del cuadro de edición más de la contraseña del cuadro de edición, sobrepasan los botones ACEPTAR y CANCELAR. Los cuadros de edición se establecen en mayúsculas, como yo estaba usando todas las mayúsculas para los nombres y las contraseñas en la tabla de seguridad. Si quieres ir un paso más allá de tener entre mayúsculas y minúsculas identificadores, entonces no lo hagas. Puse un origen de datos y tabla de componente conectado a Pazwordz en el formulario. Como toque final, he decidido incluir una imagen, con mi logo y la etiqueta de 'Una Idea Mecánica de Aplicación'. Usted podría incluir una imagen genérica, una empresa específica de la imagen o nada en absoluto.
KeyPreview se convirtió en VERDAD, un paso importante. Y he tenido que añadir los diálogos de la unidad para el usa la instrucción. Entonces, he añadido el siguiente código:
var
& nbsp & nbsp DlgLogin2 : TDlgLogin2
& nbsp & nbsp AttemptsLeft : integer
aplicación
{el nombre y La contraseña no coinciden, Seguir o Dejar de fumar?}
procedimiento TDlgLogin2.NoGood
begin {Un intento de abajo, ¿cuántos van?}
& nbsp & nbsp AttemptsLeft := AttemptsLeft - 1
& nbsp & nbsp & nbsp si AttemptsLeft >= 1
& nbsp & nbsp & nbsp & nbsp luego begin {eliminar las malas intento y volver al principio}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eUserName.Text := '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ePassword.text := '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eUserName.setfocus
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp {podría ser más explicativo, aquí, pero ¿por qué?}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp showmessage('No es correcta, intente de nuevo!') {Podría ser más explicativo)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp demás DlgLogin2.ModalResult := mrAbort {Demasiados intentos, BYE!}
fin
{controlar la pulsación de tecla entrar el nombre de usuario del cuadro de edición}
procedimiento TDlgLogin2.eUserNameKeyPress(Sender: TObject var Key: Char)
begin
& nbsp & nbsp si Tecla = #13 {Era la tecla enter?}
& nbsp & nbsp & nbsp & nbsp luego begin {convertir entrar a una ficha}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp selectNext(ActiveControl como tWinControl, true, true)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp clave := #0 {borrar la pulsación de tecla entrar}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
fin
{Manejar la tecla entrar en la contraseña de la caja de edición, haga clic en ACEPTAR}
procedimiento TDlgLogin2.ePasswordKeyPress(Sender: TObject var Key: Char)
begin
& nbsp & nbsp si Tecla = #13
& nbsp & nbsp & nbsp & nbsp, a continuación, empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp selectNext(ActiveControl como tWinControl, true, true)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp clave := #0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp OKBtnClick(Sender) {Equivalente a hacer clic en el OKBtn}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
fin
{Cancelar ingresar nombre y contraseña. Programa no se ejecuta}
procedimiento TDlgLogin2.CancelBtnClick(Sender: TObject)
begin
& nbsp & nbsp DlgLogin2.ModalResult := mrCancel
fin
{Tenemos un intento, fue bueno? SÍ! Lamentablemente, NO!}
procedimiento TDlgLogin2.OKBtnClick(Sender: TObject)
begin
& nbsp & nbsp OKBtn.SetFocus {Esto asegura que el cuadro de edición de contenidos se leen}
& nbsp & nbsp si eUserName.texto = '
& nbsp & nbsp & nbsp & nbsp luego eUserName.setfocus {no hay nombre, no hay ningún intento de}
& nbsp & nbsp & nbsp & nbsp cosa si ePassword.texto = '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp luego ePassword.setFocus {sin contraseña, no intento}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp cosa si TblPW.findkey([eUserName.el texto]) {es el nombre no?}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp entonces, si en mayúsculas(TblPW.fieldByName('CONTRASEÑA').asString)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp = ePassword.text {es la contraseña de la misma?}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp luego DlgLogin2.ModalResult := mrOK {Permitir la ejecución del programa}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp demás NoGood {Cualquiera de los intentos de la izquierda?}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp demás NoGood {Cualquiera de los intentos de la izquierda?}
fin
inicialización
& nbsp & nbsp AttemptsLeft := 3
& nbsp Algunos de los códigos de los osos comentarios adicionales. El keyPress procedimientos para los dos cuadros de edición son los mismos, excepto para la posterior suplantación de pulsar el botón ACEPTAR después de pulsar intro en el campo de la contraseña. Y hay una falta de prueba de errores con este proyecto. Obviamente, hay varios lugares para Try/except bloques y error-controladores. Es hasta usted para determinar cuánto más a los de la unidad de la caja fuerte de codificación de la práctica en este trabajo.
El archivo de proyecto se muestra a continuación:
usos
& nbsp & nbsp Formas,
& nbsp & nbsp DBtables,
& nbsp & nbsp Diálogos,
& nbsp & nbsp FInputInv en 'FInputInv.pas' {FrmMainInput},
& nbsp & nbsp uDlgLogin2 en 'E:/v5/uDlgLogin2.pas' {DlgLogin2}
{$R *.RES}
begin
& nbsp & nbsp Aplicación.Inicializar
& nbsp & nbsp sesión.addpassword('itsreallynotmyfault')
& nbsp & nbsp DlgLogin2 := TDlgLogin2.create(nil)
& nbsp & nbsp con DlgLogin2 empiezan
& nbsp & nbsp & nbsp & nbsp TblPw.DatabaseName := 'Project1'
& nbsp & nbsp & nbsp & nbsp TblPW.TableName := 'Pazwordz'
& nbsp & nbsp & nbsp & nbsp TblPW.Active := true
& nbsp & nbsp & nbsp & nbsp showmodal
& nbsp & nbsp & nbsp & nbsp si ModalResult = 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp, a continuación, empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Aplicación.CreateForm(TFrmMainInput, FrmMainInput)
FrmMainInput.Nombre De Usuario := DlgLogin2.eUserName.texto
& nbsp & nbsp FrmMainInput.DEB :=
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DlgLogin2.TblPw.FieldByName('MiniID').asString
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si FrmMainInput.DEB = '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp luego FrmMainInput.DEB :=
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp copia(en mayúsculas(DlgLogin2.eUserName.de texto),1,3)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FrmMainInput.SecLevel :=
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DlgLogin2.TblPw.FieldByName('SecLevel').asInteger
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FrmMainInput.PgmDir := ExtractFilePath(application.ExeName)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DlgLogin2.libre
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Aplicación.Ejecutar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp demás DlgLogin2.libre
& nbsp & nbsp & nbsp & nbsp final
final.
una Vez más, hay algunos finagling con los usos de la declaración de la RPD de archivo. He añadido DBTables y cuadros de diálogo para controlar el diálogo de inicio de sesión y la base de datos de los componentes que lo forman. Yo podría haber inevitable el uso de la sección donde se establezca la seguridad de la tabla de alias del nombre de la tabla y que se active. Pero yo quería hacer de esta forma una forma universal que podría utilizar con muchas aplicaciones. Así que, he guardado el formulario de diálogo en una ubicación central y poner en las líneas que se muestra aquí para funcionar correctamente.
Uno de gotcha hizo surgir. Originalmente, el 'si ModalResult = 1' línea 'si ModalResult = mrOK.' El compilador se ahogaron en él, alegando que no podía entender mrOK. Yo estaba bastante seguro de que mrOK fue definido en los cuadros de diálogo, pero me di por vencido y en su lugar se utiliza el valor enumerado del 1 de mrOK.
Obviamente, es importante que se aferran al diálogo de inicio de sesión como usted puede, para cruzar sobre el Nivel de Seguridad, Nombre de Usuario y otras miscellanea que tiene en la tabla de seguridad. Yo uso el DEB de campo para hacer el mini-marcado por la identidad. Se destaca de los Datos Introducidos y es que generalmente los tres primeros caracteres del nombre. Pero, en el caso de la ANG, podría ser Angelo o Angie, por lo que el contenido de la tabla de seguridad de la MiniID campo de la diferencia entre las dos como ALO y ANG.
Espero que usted puede utilizar esta idea para el lanzamiento de su propio formulario de inicio de sesión, ya sea por razones de seguridad o para averiguar quién está usando la aplicación ahora mismo.
Gary Mugford
Idea Mecánico, Bramalea EN Canadá
[email protected]
La seguridad de saber quien es quien
La seguridad de saber quien es quien : Multi-millones de consejos para hacer su vida mas facil.
El Perpetuo Novato de la Entrada de Registro #5.2
Este articulo aparecio por primera vez en http://www.undu.com
Una version anterior de este articulo aparecio a principios de Febrero 00. Algunas correcciones, un poco juicioso de edicion y mejor organizacion de esperar que como resultado algo mejor para usted, el lector.
Recientemente, me encontre sin una aplicacion de inicio de sesion de componente. Obligados por las circunstancias a crear uno para al menos temporal de utilizacion, encontre la experiencia bastante interesante que he pensado que me gustaria tomar una carrera en la escritura de un omnibus articulo para que mis compañeros novatos. Tenga cuidado temporal de una secuencia un poco mas abajo!
Un formulario de inicio de sesion no es siempre el signo de una programacion paranoico. Honestamente, yo utilice el formulario de inicio de sesion para averiguar quien esta usando la aplicacion, por lo que me pueden pillar las entradas y de las ediciones con un identificador. Si usted necesita una gran seguridad en el componente o nivel de menu, salir ahora y echa un vistazo de pleno derecho, como los sistemas de la UIL Sistema de Seguridad. Pero si se ejecuta una sola aplicacion con un par de usuarios a los que queremos diferenciar, o si usted quiere tener un 'poco de seguridad,' leer.
Lectores recordaran que tiendo a comprar mis soluciones en lugar de re-inventar. Para la seguridad y un muy ingenioso formulario de inicio de sesion, he preferido Kalliopi del SecurityGuard sistema. Mientras que el uso de Delphi 3, me parecio que para ser facil de instalar, facil de usar y muy potente. Lamentablemente, no hay en Delphi 5 version de la misma. Aunque me habria de ser el primero en la fila cuando salio, mi ultima informacion es que nunca va a suceder. Sooooo, yo tenia que tener un sistema de login que tomo ventaja de las grandes cosas que habia llegado a esperar de SecurityGuard. Tenia que tener una pantalla de inicio de sesion y un medio para extraer informacion acerca de la seguridad del usuario y los niveles de otros diversos info, tales como preferencias (que yo podia hacer esto a traves de la INI/archivos de Registro, pero que es mucho mas facil ponerlo en la tabla de seguridad, ya que algunos usuarios migrar de un ordenador a otro).
Dada mi necesidad temporal de un inicio de sesion, decidi limitar mi ambiciones y de trabajo en que el nombre y el nivel de seguridad de la informacion en la aplicacion. Empece con el diseño de la tabla de seguridad, lo que yo llamo PAZWORDZ. La tabla debe incluir un campo para el nombre de usuario (con llave), la contraseña y cualquier otra informacion que usted considere apropiado.
APLICACION: Nomenclatura de los Campos
En la creacion de su propia version de una tabla de seguridad, pero sea cual sea el nombre, considere la posibilidad de una advertencia. No abuse de su derecho a los campos de nombre de lo que quieras. Hace muchos años, yo era parte de la primera operacion para combinar Paradoja para los DOS, Interbase y peer-to-peer networking. Borland dijo que no se podia hacer en el momento, pero nos hizo ... despues hemos corregido un monton de nombres de problemas.
& nbsp descubri, entonces, que los espacios, guiones bajos y los signos de puntuacion estan MAL, mal, MAL en los nombres de campo. Como todos los demas en el momento, yo estaba muy emocionado de sacudirse el yugo de la limitada dBase nombres y seres Paradoja de la capacidad de uso de nombres que se ejecuto en y en y en y en. Era el equivalente de un escritorio nuevo usuario de la publicacion de averiguar acerca de las fuentes y de su abundancia. O cuando por primera vez W95 usuarios descubierto el final de nombre de archivo 8.3 de la tirania. Se volvio loca. Para mi, fue de nombres de campo. Mi mayor crimen fue de nombres de campo como de Telefono de# o del Cliente Razones. Interbase odiaba ESOS nombres. Asi que, tuvimos que volver a hacer la estructura de las bases de datos de Paradox y luego se fue a pesar de que el codigo del programa (varias decenas de miles de lineas) de buscar y reemplazar esos nombres. NUNCA de nuevo.
Bueno, nunca es mucho tiempo. La primera vez que fui construyendo mi de seguridad de las tablas, he utilizado simple de los nombres de los campos. Sin pensar, me hizo el nombre del usuario del NOMBRE del campo. Fecha de inicio se convirtio en la FECHA. Hubo un par de faltas de otros, pero usted consigue la deriva. Estos nombres de campo no morderme hasta que yo necesitaba para utilizar algunos de SQL. A continuacion, los nombres se convirtio en la causa por el esfuerzo extra. Si el nombre del campo se ve como un posible nombre de la propiedad, o incluso PODRIA ser un nombre de propiedad, CAMBIO!. Hacerlo ahora, en la fase creativa, y usted sera mucho mas feliz mas tarde. Hacer nombre de Usuario y StartDate. Si usted no desea caso sensibles a los campos, a continuacion, asegurese de auto-tapa de los campos de nombre y contraseña. Por ultimo, no te olvides de proteger con contraseña el producto final y para grabar la contraseña. Es un descuido que he sido culpable.
SEGUE.
En hacerme un formulario de inicio de Sesion. Empece con el Delphi formulario de Contraseña. He copiado la etiqueta y el cuadro de edicion para la contraseña para crear una etiqueta para el nombre de usuario y una caja de edicion. Algunas de las maniobras de las etiquetas, cajas y botones me dio el tradicional formulario de inicio de sesion con el nombre de usuario del cuadro de edicion mas de la contraseña del cuadro de edicion, sobrepasan los botones ACEPTAR y CANCELAR. Los cuadros de edicion se establecen en mayusculas, como yo estaba usando todas las mayusculas para los nombres y las contraseñas en la tabla de seguridad. Si quieres ir un paso mas alla de tener entre mayusculas y minusculas identificadores, entonces no lo hagas. Puse un origen de datos y tabla de componente conectado a Pazwordz en el formulario. Como toque final, he decidido incluir una imagen, con mi logo y la etiqueta de 'Una Idea Mecanica de Aplicacion'. Usted podria incluir una imagen generica, una empresa especifica de la imagen o nada en absoluto.
KeyPreview se convirtio en VERDAD, un paso importante. Y he tenido que añadir los dialogos de la unidad para el usa la instruccion. Entonces, he añadido el siguiente codigo:
var
& nbsp & nbsp DlgLogin2 : TDlgLogin2
& nbsp & nbsp AttemptsLeft : integer
aplicacion
{el nombre y La contraseña no coinciden, Seguir o Dejar de fumar?}
procedimiento TDlgLogin2.NoGood
begin {Un intento de abajo, ¿cuantos van?}
& nbsp & nbsp AttemptsLeft := AttemptsLeft - 1
& nbsp & nbsp & nbsp si AttemptsLeft >= 1
& nbsp & nbsp & nbsp & nbsp luego begin {eliminar las malas intento y volver al principio}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eUserName.Text := '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp ePassword.text := '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp eUserName.setfocus
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp {podria ser mas explicativo, aqui, pero ¿por que?}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp showmessage('No es correcta, intente de nuevo!') {Podria ser mas explicativo)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp demas DlgLogin2.ModalResult := mrAbort {Demasiados intentos, BYE!}
fin
{controlar la pulsacion de tecla entrar el nombre de usuario del cuadro de edicion}
procedimiento TDlgLogin2.eUserNameKeyPress(Sender: TObject var Key: Char)
begin
& nbsp & nbsp si Tecla = #13 {Era la tecla enter?}
& nbsp & nbsp & nbsp & nbsp luego begin {convertir entrar a una ficha}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp selectNext(ActiveControl como tWinControl, true, true)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp clave := #0 {borrar la pulsacion de tecla entrar}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
fin
{Manejar la tecla entrar en la contraseña de la caja de edicion, haga clic en ACEPTAR}
procedimiento TDlgLogin2.ePasswordKeyPress(Sender: TObject var Key: Char)
begin
& nbsp & nbsp si Tecla = #13
& nbsp & nbsp & nbsp & nbsp, a continuacion, empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp selectNext(ActiveControl como tWinControl, true, true)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp clave := #0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp OKBtnClick(Sender) {Equivalente a hacer clic en el OKBtn}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
fin
{Cancelar ingresar nombre y contraseña. Programa no se ejecuta}
procedimiento TDlgLogin2.CancelBtnClick(Sender: TObject)
begin
& nbsp & nbsp DlgLogin2.ModalResult := mrCancel
fin
{Tenemos un intento, fue bueno? SI! Lamentablemente, NO!}
procedimiento TDlgLogin2.OKBtnClick(Sender: TObject)
begin
& nbsp & nbsp OKBtn.SetFocus {Esto asegura que el cuadro de edicion de contenidos se leen}
& nbsp & nbsp si eUserName.texto = '
& nbsp & nbsp & nbsp & nbsp luego eUserName.setfocus {no hay nombre, no hay ningun intento de}
& nbsp & nbsp & nbsp & nbsp cosa si ePassword.texto = '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp luego ePassword.setFocus {sin contraseña, no intento}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp cosa si TblPW.findkey([eUserName.el texto]) {es el nombre no?}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp entonces, si en mayusculas(TblPW.fieldByName('CONTRASEÑA').asString)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp = ePassword.text {es la contraseña de la misma?}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp luego DlgLogin2.ModalResult := mrOK {Permitir la ejecucion del programa}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp demas NoGood {Cualquiera de los intentos de la izquierda?}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp demas NoGood {Cualquiera de los intentos de la izquierda?}
fin
inicializacion
& nbsp & nbsp AttemptsLeft := 3
& nbsp Algunos de los codigos de los osos comentarios adicionales. El keyPress procedimientos para los dos cuadros de edicion son los mismos, excepto para la posterior suplantacion de pulsar el boton ACEPTAR despues de pulsar intro en el campo de la contraseña. Y hay una falta de prueba de errores con este proyecto. Obviamente, hay varios lugares para Try/except bloques y error-controladores. Es hasta usted para determinar cuanto mas a los de la unidad de la caja fuerte de codificacion de la practica en este trabajo.
El archivo de proyecto se muestra a continuacion:
usos
& nbsp & nbsp Formas,
& nbsp & nbsp DBtables,
& nbsp & nbsp Dialogos,
& nbsp & nbsp FInputInv en 'FInputInv.pas' {FrmMainInput},
& nbsp & nbsp uDlgLogin2 en 'E:/v5/uDlgLogin2.pas' {DlgLogin2}
{$R *.RES}
begin
& nbsp & nbsp Aplicacion.Inicializar
& nbsp & nbsp sesion.addpassword('itsreallynotmyfault')
& nbsp & nbsp DlgLogin2 := TDlgLogin2.create(nil)
& nbsp & nbsp con DlgLogin2 empiezan
& nbsp & nbsp & nbsp & nbsp TblPw.DatabaseName := 'Project1'
& nbsp & nbsp & nbsp & nbsp TblPW.TableName := 'Pazwordz'
& nbsp & nbsp & nbsp & nbsp TblPW.Active := true
& nbsp & nbsp & nbsp & nbsp showmodal
& nbsp & nbsp & nbsp & nbsp si ModalResult = 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp, a continuacion, empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Aplicacion.CreateForm(TFrmMainInput, FrmMainInput)
FrmMainInput.Nombre De Usuario := DlgLogin2.eUserName.texto
& nbsp & nbsp FrmMainInput.DEB :=
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DlgLogin2.TblPw.FieldByName('MiniID').asString
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si FrmMainInput.DEB = '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp luego FrmMainInput.DEB :=
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp copia(en mayusculas(DlgLogin2.eUserName.de texto),1,3)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FrmMainInput.SecLevel :=
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DlgLogin2.TblPw.FieldByName('SecLevel').asInteger
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FrmMainInput.PgmDir := ExtractFilePath(application.ExeName)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp DlgLogin2.libre
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Aplicacion.Ejecutar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp demas DlgLogin2.libre
& nbsp & nbsp & nbsp & nbsp final
final.
una Vez mas, hay algunos finagling con los usos de la declaracion de la RPD de archivo. He añadido DBTables y cuadros de dialogo para controlar el dialogo de inicio de sesion y la base de datos de los componentes que lo forman. Yo podria haber inevitable el uso de la seccion donde se establezca la seguridad de la tabla de alias del nombre de la tabla y que se active. Pero yo queria hacer de esta forma una forma universal que podria utilizar con muchas aplicaciones. Asi que, he guardado el formulario de dialogo en una ubicacion central y poner en las lineas que se muestra aqui para funcionar correctamente.
Uno de gotcha hizo surgir. Originalmente, el 'si ModalResult = 1' linea 'si ModalResult = mrOK.' El compilador se ahogaron en el, alegando que no podia entender mrOK. Yo estaba bastante seguro de que mrOK fue definido en los cuadros de dialogo, pero me di por vencido y en su lugar se utiliza el valor enumerado del 1 de mrOK.
Obviamente, es importante que se aferran al dialogo de inicio de sesion como usted puede, para cruzar sobre el Nivel de Seguridad, Nombre de Usuario y otras miscellanea que tiene en la tabla de seguridad. Yo uso el DEB de campo para hacer el mini-marcado por la identidad. Se destaca de los Datos Introducidos y es que generalmente los tres primeros caracteres del nombre. Pero, en el caso de la ANG, podria ser Angelo o Angie, por lo que el contenido de la tabla de seguridad de la MiniID campo de la diferencia entre las dos como ALO y ANG.
Espero que usted puede utilizar esta idea para el lanzamiento de su propio formulario de inicio de sesion, ya sea por razones de seguridad o para averiguar quien esta usando la aplicacion ahora mismo.
Gary Mugford
Idea Mecanico, Bramalea EN Canada
[email protected]
La seguridad de saber quién es quién
By Consejos Y Trucos
La seguridad de saber quién es quién : Multi-millones de consejos para hacer su vida más fácil.