diff --git a/README.md b/README.md index d9b47b6..6186e77 100644 --- a/README.md +++ b/README.md @@ -3,21 +3,30 @@ La mejor forma para iniciarse con el Framework Web [Pyramid](http://docs.pylonsproject.org/en/latest/docs/pyramid.html) es haciendo un recorrido por las funcionalidades más resaltantes del mismo. Este repositorio es para mantener una traducción -*no oficial* del [Quick Tutorial](http://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/index.html) incluido en la documentación +*no oficial* del [Quick Tutorial](http://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/index.html) incluído en la documentación del Framework. ## Indicaciones para seguir el tutorial *TODO* -## Indicaciones para colaborar con traducción +## Indicaciones para colaborar con traducción -Para participar de la traducción por favor revise en el documento de -avances que porciones se encuentran traducidas. Coloque en la sección de -[Issues](https://github.com/pyve/Pyramid-Tutorial-Rapido/issues) el -título que va a traducir. Haga un Fork del repositorio y proceda a traducir -la porción que indicó en el ticket. Una vez finalizado proceda a hacer un -Pull Request para que otro colaborador pueda hacer una revisión rápida de +Para participar de la traducción por favor; + +1. Haga un Fork del repositorio. + +2. Revise en el documento de avances que porciones se encuentran traducidas. + +3. Coloque en la sección de [Issues](https://github.com/pyve/Pyramid-Tutorial-Rapido/issues) el +título que va a traducir. + +4. Proceda a traducir la porción que indicó en el ticket. + +5. Devuelva los cambios vía Pull Request. + + +Ésto para que otro colaborador pueda hacer una revisión rápida de tradujo. En caso de realizar una revisión global de ortografía o redacción por favor @@ -25,11 +34,11 @@ indicarlo en el ticket nombrando a las personas que estén trabajando simultaneamente con usted en algún archivo, de modo que estén concientes de posible cambios en sus contenidos. -Por favor no cambie los archivos en inglés, considerelos como de sólo -lectura. +**Por favor no cambie los archivos en inglés, considerelos como de sólo +lectura.** Al incorporarse en el proceso de traducción por favor agregue su nombre en -el siguiente título. +el siguiente apartado. ## Colaboradores diff --git a/tutorial_rapido/authentication.rst b/tutorial_rapido/authentication.rst new file mode 100644 index 0000000..280d61d --- /dev/null +++ b/tutorial_rapido/authentication.rst @@ -0,0 +1,139 @@ +============================== +20: Logueos con autenticación +============================== + +Una vista para ingresar que autentifica un nombre de usuario/contraseña contra una lista de +usuarios. + +Fondo +====== + +La mayoría de las aplicaciones web tienen direcciones URL que permiten a los usuarios añadir/editar/borrar +contenido a través de un navegador web. +Es tiempo de agregar +:ref:`seguridad ` a la aplicación. +En este primer paso, nos vamos a introducir en la autenticación. +Es decir, el registro y cierre de sesión de los usuarios conectados +utilizando las instalaciones Pyramid's de forma fácil. + + +En el siguiente paso nos vamos a introducir en la protección de recursos +con declaraciones de seguridad para la autorización. + +Objetivos +========== + +- Introducción de los conceptos de autenticación + +- Crear vistas para ingresar/salir + + +Pasos +===== + +#. Vamos a utilizar la clase "vista" como punto de partida: + + .. code-block:: bash + + $ cd ..; cp -r view_classes authentication; cd authentication + $ $VENV/bin/python setup.py develop + +#. Colocar el hash de seguridad en el archivo ``authentication/development.ini`` + de configuración como ``tutorial.secret`` en vez de colocarlo directo en + el código: + + .. literalinclude:: authentication/development.ini + :language: ini + :linenos: + +#. Obten la autenticación (y por ahora, las políticas de autorización) y la ruta + de ingreso dentro de :term:`configurator` en + ``authentication/tutorial/__init__.py``: + + .. literalinclude:: authentication/tutorial/__init__.py + :linenos: + +#. Crear un módulo: ``authentication/tutorial/security.py`` que puede encontrar +    nuestra información del usuario al proporcionar la llamada a la política + de autenticación + + .. literalinclude:: authentication/tutorial/security.py + :linenos: + +#. Actualizar la vista en: ``authentication/tutorial/views.py``: + + .. literalinclude:: authentication/tutorial/views.py + :linenos: + +#. Agregar una plantilla de ingreso en: ``authentication/tutorial/login.pt``: + + .. literalinclude:: authentication/tutorial/login.pt + :language: html + :linenos: + +#. Proporcionar un inicio de sesión y salida del sistema en: ``authentication/tutorial/home.pt`` + + .. literalinclude:: authentication/tutorial/home.pt + :language: html + :linenos: + +#. Ejecuta tu aplicación Pyramid con: + + .. code-block:: bash + + $ $VENV/bin/pserve development.ini --reload + +#. Abre http://localhost:6543/ en tu navegador. + +#. Click en "Inicio de sesión". + +#. Envíe el formulario de inicio de sesión con el nombre de usuario y la contraseña + ``editor``. + +#. Notar que el botón "Inicio de sesión" cambió a "Salir". + +#. Click en "Salir" link. + +Análisis +======== + +A diferencia de muchos frameworks web, Pyramid incluye un modelo de seguridad +incorporada pero que es opcional para la autenticación y autorización. Este +tipo de seguridad en el sistema está destinado a ser flexible y apoyar a +muchas necesidades. En este modelo de seguridad, la autenticación (quién eres) +y la autorización (qué tienes permitido hacer) no son conectable, pero se pueden +desvincular. +Pero aprenderemos un paso a la vez, vamos a proveer un sistema con inicio y salida +del mismo. + +En éste ejemplo se optó por usar el paquete: +:ref:`AuthTktAuthenticationPolicy `. +Lo activamos en nuestra configuración y proporcionamos un +"ticket-signing" en nuestro archivo INI. + +Nuestra clase de la "vista" nos extendió un inicio de sesión. +Cuando llegamos a ella, a través de un GET, ella retorna +un formulario de inicio de sesión. Al llegar a través de POST, se procese el +nombre de usuario y la contraseña contra el "groupfinder" que debe estar +registrada en la configuración. + +En nuestra plantilla, buscamos el valor `logged_in`` de la clase "vista" +Usamos ésto para saber si hay un usuario logueado, de haberlo. +En la plantilla nosotros podemos escoher como mostrar el enlace +de inicio de sesión para los usuarios anónimos o el enlace de salida +para los usuarios logueados. + + +Crédito extra +============ + +#. ¿Cuál es la diferencia entre un usuario y un administrador? + +#. ¿Puedo usar una base de datos detrás de mi ``groupfinder`` para buscar los administradores? + +#. Una vez se inicia sesión, ¿toda la información centrada del usuario puede atascarse +    en cada solicitud? Usar ``import pdb; pdb.set_trace()`` para responder + ésto. + +.. seealso:: Vea también :ref:`security_chapter`, + :ref:`AuthTktAuthenticationPolicy `. \ No newline at end of file diff --git a/tutorial_rapido/authorization.rst b/tutorial_rapido/authorization.rst new file mode 100644 index 0000000..feedc87 --- /dev/null +++ b/tutorial_rapido/authorization.rst @@ -0,0 +1,118 @@ +=========================================== +21: Proteger recursos con "Autorización" +=========================================== + +Asignar declaraciones de seguridad para recursos que describan los permisos +requeridos para realizar una operación. + +Fondo +========== + +Nuestra aplicación tendrá URLs que permitirán a través del navegador +al usuario agregar/editar/borrar contenido. Es tiempo de agregar seguridad +a la aplicación. Vamos a proteger nuestra vista de agregar/editar requeriendo +un inicio de sesión (nombre de usuario del ``editor`` y contraseña del +``editor``). Vamos a permitir que otras vistas continúen trabajando +sin una contraseña. + + +Objetivos +========== + +- Introducción a los conceptos de autenticación, autorización, +permiso, y listas de acceso de control(ACLs) en Pyramid. + +- Hacer un :term:`root factory` que retorne una instancia de nuestra +clase para la parte superior de la aplicación. + +- Asignar declaraciones de seguridad para nuestro recurso raíz + +- Agregar un permisos en una vista implicada. + +- Proveer un :term:`Forbidden view` para manejar las visitas a una +URL sin el permiso adecuado. + + +Pasos +===== + +#. Vamos a usar el paso de autenticación como nuestro punto de inicio: + + .. code-block:: bash + + $ cd ..; cp -r authentication authorization; cd authorization + $ $VENV/bin/python setup.py develop + +#. Comenzaremos por cambiar: ``authorization/tutorial/__init__.py`` para + especificar una raíz al :term:`configurator`: + + .. literalinclude:: authorization/tutorial/__init__.py + :linenos: + +#. Eso significa que tenemos que que vamos a implementar: + ``authorization/tutorial/resources.py`` + + .. literalinclude:: authorization/tutorial/resources.py + :linenos: + +#. Cambiar ``authorization/tutorial/views.py`` para requerir ``edit`` + permiso en la vista ``hello`` e implementar la prohibición en la vista: + + .. literalinclude:: authorization/tutorial/views.py + :linenos: + +#. Ejecuta tu aplicación Pyramid usando: + + .. code-block:: bash + + $ $VENV/bin/pserve development.ini --reload + +#. Abrir http://localhost:6543/ en el navegador. + +#. Si apareces con la sesión iniciada, click en el link "salir". + +#. Visita http://localhost:6543/howdy en una navegador. Se te pedirá + que inicies sesión + + +Análisis +======== + +Este simple tutorial puede reducirse a lo siguiente: + +- Una vista puede requerir un *permiso* (``edit``) + +- El contexto para nuestra vista (el ``Root``) tiene una lista de + acceso de control. (ACL) + +- Esta ACL dice que el permiso para ``edit`` está disponible en, ``Root`` + para el grupo ``group:editors`` *principal* + +- El registro ``groupfinder`` responderá si un usuario en particular + (``editor``) pertenece a un grupo en especial (``group:editors``) + +En resumen: ``hello`` requiere permisos para ``edit`` , ``Root`` dice el +``group:editors`` tiene permisos para ``edit``. + +Claro, esto solo aplica en: ``Root``. En otra parte del sitio +(a.k.a. *contexto*) podría tener un diferente ACL. + +Sino has iniciado sesión y visitas ``/howdy``, necesitarás hacerlo en +la pantalla de inicio de sesión. Cómo sabe Pyramid cuál es la página de inicio +de sesión? Nosotros explícitamente se lo dijimos en la vista ``login`` usando el +decorador ``@forbidden_view_config`` en dicha vista. + +Crédito extra +============ + +#. Tengo que poner un ``renderer`` en mi decorador ``@forbidden_view_config``? + +#. Tal vez le gustaría experimentar con no tener suficientes permisos + (forbidden) como para editar. ¿Cómo puedes hacer para cambiar ésto? + +#. Tal vez queremos almacenar declaraciones de seguridad en una base de datos y +    permitir la edición a través de un navegador. ¿Cómo puede hacerse esto? + +#. ¿Qué pasa si queremos diferentes declaraciones de seguridad en diferentes tipos de +    objetos? O en el mismo tipo de objetos, pero en diferentes partes de una +    Jerarquía URL?