Various minor adjustments to code and a WHOLE lot of documentation
[catagits/Catalyst-Plugin-Authentication.git] / lib / Catalyst / Plugin / Authentication / User.pm
CommitLineData
06675d2e 1#!/usr/bin/perl
2
3package Catalyst::Plugin::Authentication::User;
4
5use strict;
6use warnings;
7
06675d2e 8
54c8dc06 9## chances are you want to override this.
10sub id { shift->get('id'); }
11
12## returns the realm the user came from - not a good idea to override this.
13sub auth_realm {
14 my $self = shift;
15 $self->{'realm'};
16}
17
18
649de93b 19## this relies on 'supported_features' being implemented by the subclass..
20## but it is not an error if it is not. it just means you support nothing.
21## nihilist user objects are welcome here.
6c8b6e5e 22sub supports {
23 my ( $self, @spec ) = @_;
24
649de93b 25 my $cursor = undef;
26 if ($self->can('supported_features')) {
27 $cursor = $self->supported_features;
6c8b6e5e 28
649de93b 29 # traverse the feature list,
30 for (@spec) {
31 #die "bad feature spec: @spec" if ref($cursor) ne "HASH";
32 return if ref($cursor) ne "HASH";
6c8b6e5e 33
649de93b 34 $cursor = $cursor->{$_};
35 }
36 }
6c8b6e5e 37
38 return $cursor;
39}
06675d2e 40
54c8dc06 41## REQUIRED.
42## get should return the value of the field specified as it's single argument from the underlying
43## user object. This is here to provide a simple, standard way of accessing individual elements of a user
44## object - ensuring no overlap between C::P::A::User methods and actual fieldnames.
45## this is not the most effecient method, since it uses introspection. If you have an underlying object
46## you most likely want to write this yourself.
47sub get {
48 my ($self, $field) = @_;
49
50 my $object;
51 if ($object = $self->get_object && $object->can($field)) {
52 return $object->$field();
53 } else {
54 return undef;
55 }
56}
57
58## REQUIRED.
59## get_object should return the underlying user object. This is for when more advanced uses of the
60## user is required. Modifications to the existing user, etc. Changes in the object returned
61## by this routine may not be reflected in the C::P::A::User object - if this is required, re-authenticating
62## the user is probably the best route to take.
63## note that it is perfectly acceptable to return $self in cases where there is no underlying object.
64sub get_object {
65 return shift;
66}
67
68## this is an internal routine. I suggest you don't rely on it's presence.
69## sets the realm the user came from.
70sub _set_auth_realm {
71 my ($self, $realmname) = @_;
72 $self->{'realm'} = $realmname;
73}
74
75## Backwards Compatibility
76## you probably want auth_realm, in fact. but this does work for backwards compatibility.
77sub store {
78 my ($self) = @_;
79 return $self->auth_realm->{store};
80}
81
06675d2e 82__PACKAGE__;
83
84__END__
85
86=pod
87
88=head1 NAME
89
90Catalyst::Plugin::Authentication::User - Base class for user objects.
91
92=head1 SYNOPSIS
93
94 package MyStore::User;
95 use base qw/Catalyst::Plugin::Authentication::User/;
96
97=head1 DESCRIPTION
98
99This is the base class for authenticated
100
101=head1 METHODS
102
103=over 4
104
105=item id
106
107A unique ID by which a user can be retrieved from the store.
108
109=item store
110
111Should return a class name that can be used to refetch the user using it's
112ID.
113
114=item supports
115
116An introspection method used to determine what features a user object has, to support credential and authorization plugins.
117
118=item
119
120=back
121
122=cut
123
124