From: Kennedy Clark Date: Mon, 26 Jun 2006 14:10:34 +0000 (+0000) Subject: Convert 'sub default :Private' actions to 'sub base :Path :Args(0)' as per suggestion... X-Git-Tag: 5.7099_04~460 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=7e5eb02c6b73fe449f282d5ac54f319463a46c3c Convert 'sub default :Private' actions to 'sub base :Path :Args(0)' as per suggestion from MST. Misc fixes. --- diff --git a/lib/Catalyst/Manual/Tutorial/Authentication.pod b/lib/Catalyst/Manual/Tutorial/Authentication.pod index c33946b..0b06b2b 100644 --- a/lib/Catalyst/Manual/Tutorial/Authentication.pod +++ b/lib/Catalyst/Manual/Tutorial/Authentication.pod @@ -417,13 +417,13 @@ such matters up to you, the designer and programmer. Then open C and add: - =head2 default + =head2 base Login logic =cut - sub default : Private { + sub base :Path :Args(0) { my ($self, $c) = @_; # Get the username and password from form @@ -454,15 +454,29 @@ at the login page but receive an error message. If the C and C values are not present in the form, the user will be taken to the empty login form. +We are using C here to specifically match +the URL C. C actions (aka, "literal actions") create URI +matches relative to the namespace of the controller where they are defined. +Although C supports arguments that allow relative and absolute paths +to be defined, here we use an empty C definition to match on just the +name of the controller itself. The method name, C, is arbitrary. +We make the match even more specific with the C<:Args(0)> action modifier +-- this forces the match on I C, not C. + +Note that we could have used something like C; +however, the use of C actions is discouraged because it does +not receive path args as with other actions. The recommended practice +is to only use C in C. + Next, create a corresponding method in C: - =head2 default + =head2 base Logout logic =cut - sub default : Private { + sub base :Path :Args(0) { my ($self, $c) = @_; # Clear the user's state @@ -472,6 +486,9 @@ Next, create a corresponding method in C: $c->response->redirect($c->uri_for('/')); } +Note that we are using the same C style +of action as with the login logic. + =head2 Add a Login Form TT Template Page diff --git a/lib/Catalyst/Manual/Tutorial/Authorization.pod b/lib/Catalyst/Manual/Tutorial/Authorization.pod index d194e5e..2162a85 100644 --- a/lib/Catalyst/Manual/Tutorial/Authorization.pod +++ b/lib/Catalyst/Manual/Tutorial/Authorization.pod @@ -110,7 +110,7 @@ Edit C and update it to match (everything from the # This is the model object created by Catalyst::Model::DBIC from your # schema (you created 'MyAppDB::User' but as the Catalyst startup # debug messages show, it was loaded as 'MyApp::Model::MyAppDB::User'). - # NOTE: Omit 'MyAppDB::Model' to avoid a component lookup issue in Catalyst 5.66 + # NOTE: Omit 'MyApp::Model' to avoid a component lookup issue in Catalyst 5.66 user_class: MyAppDB::User # This is the name of the field in your 'users' table that contains the user's name user_field: username @@ -126,7 +126,7 @@ Edit C and update it to match (everything from the # This is the model object created by Catalyst::Model::DBIC from your # schema (you created 'MyAppDB::Role' but as the Catalyst startup # debug messages show, it was loaded as 'MyApp::Model::MyAppDB::Role'). - # NOTE: Omit 'MyAppDB::Model' to avoid a component lookup issue in Catalyst 5.66 + # NOTE: Omit 'MyApp::Model' to avoid a component lookup issue in Catalyst 5.66 role_class: MyAppDB::Role # The name of the field in the 'roles' table that contains the role name role_field: role @@ -251,9 +251,10 @@ running) and restart it: Now trying going to L and you should be taken to the login page (you might have to C your -browser). Try logging in with both C and C (both use a -password of C) and notice how the roles information updates at -the bottom of the "Book List" page. Also try the C link on the +browser and/or click the "Logout" link on the book list page). Try +logging in with both C and C (both use a password +of C) and notice how the roles information updates at the +bottom of the "Book List" page. Also try the C link on the book list page. Now the "url_create" URL will work if you are already logged in as user @@ -266,12 +267,13 @@ while logged in as each user. Use one of the 'Logout' links (or go to L in you browser directly) when you are done. + =head1 ENABLE ACL-BASED AUTHORIZATION This section takes a brief look at how the -L plugin can automate much of the -work required to perform role-based authorization in a Catalyst -application. +L +plugin can automate much of the work required to perform role-based +authorization in a Catalyst application. =head2 Add the C Plugin @@ -305,7 +307,7 @@ C<__PACKAGE__-Esetup;> statement: Each of the three statements above comprises an ACL plugin "rule". The first two rules only allow admin-level users to create new books using the form (both the form itself and the data submission logic are -protected). The third statement allows both users and admin to delete +protected). The third statement allows both users and admins to delete books. The C action will continue to be protected by the "manually configured" authorization created earlier in this part of the tutorial. @@ -359,7 +361,7 @@ C B the C<__PACKAGE__-Esetup;> line. =head2 Add a Method to Handle Access Violations By default, -L +L throws an exception when authorization fails. This will take the user to the Catalyst debug screen, or a "Please come back later" message if you are not using the C<-Debug> flag. This step uses the @@ -380,12 +382,11 @@ following method: # Set the error message $c->stash->{error_msg} = 'Unauthorized!'; - + # Display the list $c->forward('list'); } - Then run the Catalyst development server script: $ script/myapp_server.pl @@ -411,5 +412,3 @@ Please report any errors, issues or suggestions to the author. Copyright 2006, Kennedy Clark, under Creative Commons License (L). -Version: .94 - diff --git a/lib/Catalyst/Manual/Tutorial/CatalystBasics.pod b/lib/Catalyst/Manual/Tutorial/CatalystBasics.pod index e20e453..43f6344 100644 --- a/lib/Catalyst/Manual/Tutorial/CatalystBasics.pod +++ b/lib/Catalyst/Manual/Tutorial/CatalystBasics.pod @@ -806,10 +806,10 @@ Then open C in your editor and enter: [% # First initialize a TT variable to hold a list. Then use a TT FOREACH -%] [% # loop in 'side effect notation' to load just the last names of the -%] - [% # authors into the list. Note that we are making a bogus assignment to -%] - [% # the 'xx' vbl to avoid printing the size of the list after each push. -%] + [% # authors into the list. Note that we make a bogus assignment to the -%] + [% # 'unused' vbl to avoid printing the size of the list after each push. -%] [% tt_authors = [ ]; - xx = tt_authors.push(author.last_name) FOREACH author = book.authors %] + unused = tt_authors.push(author.last_name) FOREACH author = book.authors %] [% # Now use a TT 'virtual method' to display the author count in parens -%] ([% tt_authors.size %]) [% # Use another vmethod to join & print the names with comma separators -%]