Add simple "admin" user support
[scpubgit/stemmatology.git] / lib / Text / Tradition / User.pm
index 9071062..7e53bb4 100644 (file)
@@ -8,15 +8,42 @@ with qw(KiokuX::User);
 
 ## 'id' provided by KiokuX::User stores our username
 has 'password'   => (is => 'rw', required => 1);
+## Change this default active value if you want/need to have an admin confirm a user after they self-create.
 has 'active'     => (is => 'rw', default => sub { 1; });
+has 'role'       => (is => 'rw', default => sub { 'user' });
 # 'traits' => ['Array'] ?
 # https://metacpan.org/module/Moose::Meta::Attribute::Native::Trait::Array
-has 'traditions' => (is => 'rw', isa => 'ArrayRef[Text::Tradition]', required => 0);
-
-# after add_tradition => sub { 
-#     $tradition->set_user($self) 
-#         unless $tradition->user->id eq $self->id;
-# }
+has 'traditions' => (is => 'rw', 
+                     traits => ['Array'],
+                     handles => {
+                         'add_tradition' => 'push',
+                     },
+                     isa => 'ArrayRef[Text::Tradition]', 
+                     default => sub { [] }, 
+                     required => 0);
+
+after add_tradition => sub { 
+    my ($self, $tradition) = @_;
+    $tradition->user($self) 
+        unless $tradition->has_user && $tradition->user->id eq $self->id;
+};
+
+sub remove_tradition {
+    my ($self, $tradition) = @_;
+
+    ## FIXME: Is "name" a good unique field to compare traditions on?
+    my @traditions = @{$self->traditions};
+    @traditions = grep { $tradition != $_ } @traditions;
+
+    $tradition->clear_user;
+    $self->traditions(\@traditions);
+}
+
+sub is_admin {
+    my ($self) = @_;
+
+    return $self->role eq 'admin';
+}
 
 1;
 
@@ -76,3 +103,4 @@ Returns an ArrayRef of L<Text::Tradition> objects belonging to this user.
 
 Inherited from KiokuX::User, verifies a given password string against
 the stored encrypted version.
+