diff options
Diffstat (limited to 'usr/src/libpiny/lib/Piny/User.pm')
-rw-r--r-- | usr/src/libpiny/lib/Piny/User.pm | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/usr/src/libpiny/lib/Piny/User.pm b/usr/src/libpiny/lib/Piny/User.pm index 53e310b..e4b865c 100644 --- a/usr/src/libpiny/lib/Piny/User.pm +++ b/usr/src/libpiny/lib/Piny/User.pm @@ -4,10 +4,19 @@ package Piny::User; use Moose; +use Moose::Util::TypeConstraints; use Piny::Email; use Piny::Group; +# Types + +subtype 'Username' + => as 'Str' + => where { $_ =~ /^(?!(git|ikiwiki)-)[[a-zA-Z0-9][a-zA-Z0-9_.-]*$/ } + => message { 'That username is not in the correct format for a piny user.' } + ; + # Attributes has 'uid' => @@ -18,7 +27,7 @@ has 'uid' => has 'username' => ( is => 'ro' - , isa => 'Str' + , isa => 'Username' , lazy_build => 1 ); @@ -50,6 +59,24 @@ has 'groups' => , init_arg => undef ); +# Public methods + +sub add_group { + my ( $s, @groups ) = @_; + + foreach my $group ( @groups ) { + $group->add_member( $s ); + }; +}; + +sub remove_group { + my ( $s, @groups ) = @_; + + foreach my $group ( @groups ) { + $group->remove_member( $s ); + }; +}; + # Builder methods # If constructed with just one argument, then |