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 )