summaryrefslogtreecommitdiff
path: root/docs/tutorials/wiki2/authorization.rst
diff options
context:
space:
mode:
authorSteve Piercy <web@stevepiercy.com>2015-11-16 00:17:20 -0800
committerSteve Piercy <web@stevepiercy.com>2015-11-16 00:17:20 -0800
commit4040cf7ef5a9843e25db69b3a17b3796f3a39fb8 (patch)
treebac060030ab5ecd0710f1236d07d5998ef098425 /docs/tutorials/wiki2/authorization.rst
parenta81ac719ce8a61305f20d05e10b3397b31ec8951 (diff)
downloadpyramid-4040cf7ef5a9843e25db69b3a17b3796f3a39fb8.tar.gz
pyramid-4040cf7ef5a9843e25db69b3a17b3796f3a39fb8.tar.bz2
pyramid-4040cf7ef5a9843e25db69b3a17b3796f3a39fb8.zip
- complete rewrite of wiki2/authorization.rst
- add wiki2/src/authorization/ files - improve <title> tag in views/tutorial/templates/edit.jinja2
Diffstat (limited to 'docs/tutorials/wiki2/authorization.rst')
-rw-r--r--docs/tutorials/wiki2/authorization.rst137
1 files changed, 68 insertions, 69 deletions
diff --git a/docs/tutorials/wiki2/authorization.rst b/docs/tutorials/wiki2/authorization.rst
index 98e6110f3..e40433497 100644
--- a/docs/tutorials/wiki2/authorization.rst
+++ b/docs/tutorials/wiki2/authorization.rst
@@ -104,10 +104,8 @@ Open ``tutorial/tutorial/__init__.py`` and add a ``root_factory`` parameter to
our :term:`Configurator` constructor, that points to the class we created
above:
-.. TODO update the lines to include, linenos, lineno-start
-
.. literalinclude:: src/authorization/tutorial/__init__.py
- :lines: 24-25
+ :lines: 13-14
:emphasize-lines: 2
:language: python
@@ -128,18 +126,18 @@ Open ``tutorial/tutorial/__init__.py`` and add the highlighted import
statements:
.. literalinclude:: src/authorization/tutorial/__init__.py
- :lines: 1-7
+ :lines: 1-5
:linenos:
- :emphasize-lines: 2-3,7
+ :emphasize-lines: 2-5
:language: python
Now add those policies to the configuration:
.. literalinclude:: src/authorization/tutorial/__init__.py
- :lines: 21-27
+ :lines: 7-16
:linenos:
- :lineno-start: 21
- :emphasize-lines: 1-3,6-7
+ :lineno-start: 7
+ :emphasize-lines: 4-6,9-10
:language: python
Only the highlighted lines need to be added.
@@ -152,47 +150,50 @@ ticket that may be included in the request. We are also enabling an
Note that the :class:`pyramid.authentication.AuthTktAuthenticationPolicy`
constructor accepts two arguments: ``secret`` and ``callback``. ``secret`` is
a string representing an encryption key used by the "authentication ticket"
-machinery represented by this policy: it is required. The ``callback`` is the
+machinery represented by this policy; it is required. The ``callback`` is the
``groupfinder()`` function that we created before.
+
Add permission declarations
~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Open ``tutorial/tutorial/views.py`` and add a ``permission='edit'`` parameter
-to the ``@view_config`` decorators for ``add_page()`` and ``edit_page()``:
-.. literalinclude:: src/authorization/tutorial/views.py
- :lines: 60-61
+Open ``tutorial/tutorial/views/default.py`` and add a ``permission='view'``
+parameter to the ``@view_config`` decorator for ``view_wiki()`` and
+``view_page()`` as follows:
+
+.. literalinclude:: src/authorization/tutorial/views/default.py
+ :lines: 27-29
:emphasize-lines: 1-2
:language: python
-.. literalinclude:: src/authorization/tutorial/views.py
- :lines: 75-76
+.. literalinclude:: src/authorization/tutorial/views/default.py
+ :lines: 33-35
:emphasize-lines: 1-2
:language: python
Only the highlighted lines, along with their preceding commas, need to be
edited and added.
-The result is that only users who possess the ``edit`` permission at the time
-of the request may invoke those two views.
+This allows anyone to invoke these two views.
-Add a ``permission='view'`` parameter to the ``@view_config`` decorator for
-``view_wiki()`` and ``view_page()`` as follows:
+Add a ``permission='edit'`` parameter to the ``@view_config`` decorators for
+``add_page()`` and ``edit_page()``:
-.. literalinclude:: src/authorization/tutorial/views.py
- :lines: 30-31
+.. literalinclude:: src/authorization/tutorial/views/default.py
+ :lines: 57-59
:emphasize-lines: 1-2
:language: python
-.. literalinclude:: src/authorization/tutorial/views.py
- :lines: 36-37
+.. literalinclude:: src/authorization/tutorial/views/default.py
+ :lines: 72-74
:emphasize-lines: 1-2
:language: python
Only the highlighted lines, along with their preceding commas, need to be
edited and added.
-This allows anyone to invoke these two views.
+The result is that only users who possess the ``edit`` permission at the time
+of the request may invoke those two views.
We are done with the changes needed to control access. The changes that
follow will add the login and logout feature.
@@ -206,7 +207,7 @@ Go back to ``tutorial/tutorial/__init__.py`` and add these two routes as
highlighted:
.. literalinclude:: src/authorization/tutorial/__init__.py
- :lines: 30-33
+ :lines: 20-23
:emphasize-lines: 2-3
:language: python
@@ -214,7 +215,7 @@ highlighted:
``view_page`` route definition:
.. literalinclude:: src/authorization/tutorial/__init__.py
- :lines: 33
+ :lines: 23
:language: python
This is because ``view_page``'s route definition uses a catch-all
@@ -234,11 +235,11 @@ We'll also add a ``logout`` view callable to our application and provide a
link to it. This view will clear the credentials of the logged in user and
redirect back to the front page.
-Add the following import statements to the head of
-``tutorial/tutorial/views.py``:
+Add the following import statements to ``tutorial/tutorial/views/default.py``
+after the import from ``pyramid.httpexceptions``:
-.. literalinclude:: src/authorization/tutorial/views.py
- :lines: 9-19
+.. literalinclude:: src/authorization/tutorial/views/default.py
+ :lines: 10-20
:emphasize-lines: 1-11
:language: python
@@ -251,18 +252,18 @@ cookie.
Now add the ``login`` and ``logout`` views at the end of the file:
-.. literalinclude:: src/authorization/tutorial/views.py
- :lines: 91-123
+.. literalinclude:: src/authorization/tutorial/views/default.py
+ :lines: 88-121
:language: python
``login()`` has two decorators:
- a ``@view_config`` decorator which associates it with the ``login`` route
- and makes it visible when we visit ``/login``,
+ and makes it visible when we visit ``/login``, and
- a ``@forbidden_view_config`` decorator which turns it into a
:term:`forbidden view`. ``login()`` will be invoked when a user tries to
execute a view callable for which they lack authorization. For example, if
- a user has not logged in and tries to add or edit a Wiki page, they will be
+ a user has not logged in and tries to add or edit a wiki page, they will be
shown the login form before being allowed to continue.
The order of these two :term:`view configuration` decorators is unimportant.
@@ -270,36 +271,36 @@ The order of these two :term:`view configuration` decorators is unimportant.
``logout()`` is decorated with a ``@view_config`` decorator which associates
it with the ``logout`` route. It will be invoked when we visit ``/logout``.
-Add the ``login.pt`` Template
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Add the ``login.jinja2`` template
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Create ``tutorial/tutorial/templates/login.pt`` with the following content:
+Create ``tutorial/tutorial/templates/login.jinja2`` with the following content:
-.. literalinclude:: src/authorization/tutorial/templates/login.pt
+.. literalinclude:: src/authorization/tutorial/templates/login.jinja2
:language: html
The above template is referenced in the login view that we just added in
-``views.py``.
+``views/default.py``.
Return a ``logged_in`` flag to the renderer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Open ``tutorial/tutorial/views.py`` again. Add a ``logged_in`` parameter to
-the return value of ``view_page()``, ``edit_page()``, and ``add_page()`` as
-follows:
+Open ``tutorial/tutorial/views/default.py`` again. Add a ``logged_in``
+parameter to the return value of ``view_page()``, ``add_page()``, and
+``edit_page()`` as follows:
-.. literalinclude:: src/authorization/tutorial/views.py
- :lines: 57-58
+.. literalinclude:: src/authorization/tutorial/views/default.py
+ :lines: 54-55
:emphasize-lines: 1-2
:language: python
-.. literalinclude:: src/authorization/tutorial/views.py
- :lines: 72-73
+.. literalinclude:: src/authorization/tutorial/views/default.py
+ :lines: 69-70
:emphasize-lines: 1-2
:language: python
-.. literalinclude:: src/authorization/tutorial/views.py
- :lines: 85-89
+.. literalinclude:: src/authorization/tutorial/views/default.py
+ :lines: 82-86
:emphasize-lines: 3-4
:language: python
@@ -311,19 +312,19 @@ the user is not authenticated, or a userid if the user is authenticated.
Add a "Logout" link when logged in
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Open ``tutorial/tutorial/templates/edit.pt`` and
-``tutorial/tutorial/templates/view.pt`` and add the following code as
+Open ``tutorial/tutorial/templates/edit.jinja2`` and
+``tutorial/tutorial/templates/view.jinja2`` and add the following code as
indicated by the highlighted lines.
-.. literalinclude:: src/authorization/tutorial/templates/edit.pt
- :lines: 34-38
- :emphasize-lines: 3-5
+.. literalinclude:: src/authorization/tutorial/templates/edit.jinja2
+ :lines: 34-40
+ :emphasize-lines: 3-7
:language: html
-The attribute ``tal:condition="logged_in"`` will make the element be included
-when ``logged_in`` is any user id. The link will invoke the logout view. The
-above element will not be included if ``logged_in`` is ``None``, such as when
-a user is not authenticated.
+The attribute ``logged_in`` will make the element be included when
+``logged_in`` is any user id. The link will invoke the logout view. The above
+element will not be included if ``logged_in`` is ``None``, such as when a user
+is not authenticated.
Reviewing our changes
---------------------
@@ -332,7 +333,7 @@ Our ``tutorial/tutorial/__init__.py`` will look like this when we're done:
.. literalinclude:: src/authorization/tutorial/__init__.py
:linenos:
- :emphasize-lines: 2-3,7,21-23,25-27,31-32
+ :emphasize-lines: 2-3,5,10-12,14-16,21-22
:language: python
Only the highlighted lines need to be added or edited.
@@ -346,31 +347,31 @@ Our ``tutorial/tutorial/models/mymodel.py`` will look like this when we're done:
Only the highlighted lines need to be added or edited.
-Our ``tutorial/tutorial/views.py`` will look like this when we're done:
+Our ``tutorial/tutorial/views/default.py`` will look like this when we're done:
-.. literalinclude:: src/authorization/tutorial/views.py
+.. literalinclude:: src/authorization/tutorial/views/default.py
:linenos:
- :emphasize-lines: 9-11,14-19,25,31,37,58,61,73,76,88,91-117,119-123
+ :emphasize-lines: 10-20,27-28,33-34,54-55,57-58,69-70,72-73,84-85,88-121
:language: python
Only the highlighted lines need to be added or edited.
-Our ``tutorial/tutorial/templates/edit.pt`` template will look like this when
+Our ``tutorial/tutorial/templates/edit.jinja2`` template will look like this when
we're done:
-.. literalinclude:: src/authorization/tutorial/templates/edit.pt
+.. literalinclude:: src/authorization/tutorial/templates/edit.jinja2
:linenos:
- :emphasize-lines: 36-38
+ :emphasize-lines: 36-40
:language: html
Only the highlighted lines need to be added or edited.
-Our ``tutorial/tutorial/templates/view.pt`` template will look like this when
+Our ``tutorial/tutorial/templates/view.jinja2`` template will look like this when
we're done:
-.. literalinclude:: src/authorization/tutorial/templates/view.pt
+.. literalinclude:: src/authorization/tutorial/templates/view.jinja2
:linenos:
- :emphasize-lines: 36-38
+ :emphasize-lines: 36-40
:language: html
Only the highlighted lines need to be added or edited.
@@ -405,5 +406,3 @@ following URLs, checking that the result is as expected:
the login form with the ``editor`` credentials), we'll see a Logout link in
the upper right hand corner. When we click it, we're logged out, and
redirected back to the front page.
-
-.. TODO update the lines to include in src/authorization/tutorial/__init__.py