=head1 DESCRIPTION
This part of the tutorial adds role-based authorization to the existing
-authentication implemented in Part 4. It provides simple examples of
+authentication implemented in Part 5. It provides simple examples of
how to use roles in both TT templates and controller actions. The first
half looks at manually configured authorization. The second half looks
at how the ACL authorization plugin can simplify your code.
=head2 Add Config Information for Authorization
-Edit C<myapp.yml> and update it to match the following (the
+Edit C<myapp.conf> and update it to match the following (the
C<role_relation> and C<role_field> definitions are new):
- ---
name MyApp
<authentication>
default_realm dbic
# This is the name of the field in the users table with the
# password stored in it
password_field password
- # We are using an unencrypted password now
- password_type clear
- </credential>
+ # Switch to more secure hashed passwords
+ password_type hashed
+ # Use the SHA-1 hashing algorithm
+ password_hash_type SHA-1
+ </credential>
<store>
# Use DBIC to retrieve username, password & role information
class DBIx::Class
# 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::Users').
+ # from your schema (you created 'MyApp::Schema::User' but as
+ # the Catalyst startup debug messages show, it was loaded as
+ # 'MyApp::Model::DB::Users').
# NOTE: Omit 'MyApp::Model' here just as you would when using
- # '$c->model("MyAppDB::Users)'
- user_class MyAppDB::Users
+ # '$c->model("DB::Users)'
+ user_class DB::Users
# This is the name of the field in your 'users' table that
# contains the user's name
id_field username
# This is the name of field in the roles table that contains
# the role information
role_field role
- </store>
- </dbic>
- </realms>
- </authentication>
+ </store>
+ </dbic>
+ </realms>
+ </authentication>
=head2 Add Role-Specific Logic to the "Book List" Template
if ($c->check_user_roles('admin')) {
# Call create() on the book model object. Pass the table
# columns/field values we want to set as hash values
- my $book = $c->model('MyAppDB::Books')->create({
+ my $book = $c->model('DB::Books')->create({
title => $title,
rating => $rating
});
body has already been set. In reality you would probably want to use a
technique that maintains the visual continuity of your template layout
(for example, using the "status" or "error" message feature added in
-Part 2).
+Part 3).
B<TIP>: If you want to keep your existing C<url_create> method, you can
create a new copy and comment out the original by making it look like a
most recent version of the Catalyst Tutorial can be found at
L<http://dev.catalyst.perl.org/repos/Catalyst/trunk/Catalyst-Manual/lib/Catalyst/Manual/Tutorial/>.
-Copyright 2006, Kennedy Clark, under Creative Commons License
+Copyright 2006-2008, Kennedy Clark, under Creative Commons License
(L<http://creativecommons.org/licenses/by-nc-sa/2.5/>).