Elive

 view release on metacpan or  search on metacpan

lib/Elive/Entity/User.pm  view on Meta::CPAN

sub get_by_loginName {
    my ($class, $loginName, @args) = @_;
    #
    # The entity name is loginName, but the fetch key is userName.
    #
    my $results = $class->_fetch({userName => $loginName},
				 @args,
	);

    return @$results && $results->[0];
}

=head2 insert

    my $new _user = Elive::Entity::User->insert({
	      loginName => ...,
	      loginPassword => ...,
	      firstName => ...,
	      lastName => ...,
	      email => ...,
	      role => ${Elive::Entity::Role::PARTICIPANT},
	    )};

Insert a new user

=cut

sub _safety_check {
    my ($self, %opt) = @_;

    unless ($opt{force}) {

	my $connection = $opt{connection} || $self->connection
	    or die "Not connected";

	die "Cowardly refusing to update login user"
	    if $self->userId eq $connection->login->userId;

	die "Cowardly refusing to update system admin account for ".$self->loginName.": (pass force => 1 to override)"
	    if ($self->_db_data->role->stringify <= ${Elive::Entity::Role::SYSTEM_ADMIN});
    }
}

=head2 update

    my $user_obj = Elive::Entity::user->retrieve($user_id);

    $user_obj->update(role => ${Elive::Entity::Role::SYSTEM_ADMIN}); # upgrade to an app admin
    $user_obj->lastName('Smith');
    $user_obj->update(undef, force => 1);

Update an Elluminate user. Everything can be changed, other than userId.
This includes the loginName. However loginNames must all remain unique.

As a safeguard, you'll need to pass C<force =E<gt> 1> to update:
    (a) users with a Role Id of 0, i.e. system administrator accounts, or
    (b) the login user

=cut

sub update {
    my ($self, $data_href, %opt) = @_;

    $self->_safety_check(%opt);
    return $self->SUPER::update( $data_href, %opt);
}

=head2 change_password

Implements the C<changePassword> SDK method.

    my $user = Elive::Entity::User->retrieve($user_id);
    $user->change_password($new_password);

This is equivalent to:

    my $user = Elive::Entity::User->retrieve($user_id);
    $user->update({loginPassword => $new_password});    

=cut

sub change_password {
    my ($self, $new_password, %opt) = @_;

    if (defined $new_password && $new_password ne '') {
	$self->_safety_check(%opt);
	$self->SUPER::update({loginPassword => $new_password},
			     command => 'changePassword',
			     %opt,
	    )
    }

    return $self;
}

=head2 delete

    $user_obj->delete();
    $admin_user_obj->delete(force => 1);

Delete user objects. As a safeguard, you need to pass C<force =E<gt> 1> to delete
system administrator accounts, or the login user.

Note that a deleted user, will have its deleted property immediately set,
but may remain accessible for a short period of time until garbage collected.

So to check for a deleted user:

    my $user = Elive::Entity::User->retrieve( $user_id ); 
    my $user_is_deleted = !$user || $user->deleted;

=cut

sub delete {
    my ($self, %opt) = @_;

    $self->_safety_check(%opt);

    return $self->SUPER::delete( %opt );
}



( run in 1.252 second using v1.01-cache-2.11-cpan-d8267643d1d )