Fix openid attribute fetching using Credential::OpenID
[scpubgit/stemmatology.git] / lib / Text / Tradition / User.pm
CommitLineData
2006bd3f 1package Text::Tradition::User;
2
3use strict;
4use warnings;
5
6use Moose;
7with qw(KiokuX::User);
8
cd726824 9## 'id' provided by KiokuX::User stores our username
2006bd3f 10has 'password' => (is => 'rw', required => 1);
570cf8ba 11## Change this default active value if you want/need to have an admin confirm a user after they self-create.
cd726824 12has 'active' => (is => 'rw', default => sub { 1; });
7cb56251 13has 'role' => (is => 'rw', default => sub { 'user' });
cd726824 14# 'traits' => ['Array'] ?
15# https://metacpan.org/module/Moose::Meta::Attribute::Native::Trait::Array
f54b1ba7 16has 'traditions' => (is => 'rw',
17 traits => ['Array'],
18 handles => {
19 'add_tradition' => 'push',
20 },
21 isa => 'ArrayRef[Text::Tradition]',
22 default => sub { [] },
23 required => 0);
24
25after add_tradition => sub {
26 my ($self, $tradition) = @_;
27 $tradition->user($self)
28 unless $tradition->has_user && $tradition->user->id eq $self->id;
29};
2006bd3f 30
ec7ea4e6 31sub remove_tradition {
32 my ($self, $tradition) = @_;
33
34 ## FIXME: Is "name" a good unique field to compare traditions on?
35 my @traditions = @{$self->traditions};
d1906a56 36 @traditions = grep { $tradition != $_ } @traditions;
ec7ea4e6 37
38 $tradition->clear_user;
39 $self->traditions(\@traditions);
40}
41
7cb56251 42sub is_admin {
43 my ($self) = @_;
44
45 return $self->role eq 'admin';
46}
47
2006bd3f 481;
cd726824 49
50=head1 NAME
51
52Text::Tradition::User - Users which own traditions, and can login to the web app
53
54=head1 SYNOPSIS
55
56 ## Users are managed by Text::Tradition::UserStore
57
58 my $userstore = Text::Tradition::UserStore->new(dsn => 'dbi:SQLite:foo.db');
59 my $newuser = $userstore->add_user({ username => 'fred',
60 password => 'somepassword' });
61
62 my $fetchuser = $userstore->find_user({ username => 'fred' });
63 if($fetchuser->check_password('somepassword')) {
64 ## login user or .. whatever
65 }
66
67 my $user = $userstore->deactivate_user({ username => 'fred' });
68 if(!$user->active) {
69 ## shouldnt be able to login etc
70 }
71
72 foreach my $t (@{ $user->traditions }) {
73 ## do something with traditions owned by this user.
74 }
75
76=head1 DESCRIPTION
77
78User objects representing owners of L<Text::Tradition>s and authenticated users.
79
80=head2 ATTRIBUTES
81
82=head3 id
83
84Inherited from KiokuX::User, stores the 'username' (login) of the user.
85
86=head3 password
87
88User's password, encrypted on creation (by
89L<KiokuX::User::Util/crypt_password>.
90
91=head3 active
92
93Active flag, defaults to true (1). Will be set to false (0) by
94L<Text::Tradition::UserStore/deactivate_user>.
95
96=head3 traditions
97
98Returns an ArrayRef of L<Text::Tradition> objects belonging to this user.
99
100=head2 METHODS
101
102=head3 check_password
103
104Inherited from KiokuX::User, verifies a given password string against
105the stored encrypted version.
fefeeeda 106