CallBackery
view release on metacpan or search on metacpan
lib/CallBackery/User.pm view on Meta::CPAN
package CallBackery::User;
# $Id: User.pm 539 2013-12-09 22:28:11Z oetiker $
# sorted hashes
use Mojo::Base -base, -signatures;
use Carp qw(croak confess);
use Mojo::Util qw(b64_decode b64_encode secure_compare);
use Mojo::JSON qw(encode_json decode_json);
use CallBackery::Exception qw(mkerror);
use Time::HiRes qw(gettimeofday);
use Mojo::Util qw(hmac_sha1_sum);
=head1 NAME
CallBackery::User - tell me about the current user
=head1 SYNOPSIS
use CallBackery::User;
my $user = CallBackery::User->new($self->controller);
$user->werk;
$user->may('right'); # does the user have the given right
$user->id;
=head1 DESCRIPTION
All the methods if L<Mojo::Base> as well as the following
=head2 $self->controller
the controller
=cut
has controller => undef, weak => 1;
has app => sub ($self) {
$self->controller->app;
}, weak => 1;
has log => sub ($self) {
$self->controller ? $self->controller->log : $self->app->log;
}, weak => 1;
=head2 $self->userId
By default the userId is numeric and represents a user account. For system tasks, it gets set to alphabetic identifiers.
The following alphabetic identifiers do exist:
__CONSOLE when running in the config console mode
__CONFIG for backup and restore tasks
=cut
=head2 userId
return the user id if the session user is valid.
=cut
has userId => sub {
my $self = shift;
my $cookieUserId = $self->cookieConf->{u};
my $db = $self->mojoSqlDb;
my $userInfo = $self->db->fetchRow('cbuser',{id=>$cookieUserId});
if (my $userId = $userInfo->{cbuser_id}){
$self->userInfo($userInfo);
$self->db->userName($userInfo->{cbuser_login});
return $userId;
}
my $userCount = [$db->dbh->selectrow_array('SELECT count(cbuser_id) FROM '
. $db->dbh->quote_identifier("cbuser"))]->[0];
return ($userCount == 0 ? '__ROOT' : undef );
};
has db => sub {
shift->app->database;
};
=head2 $self->mojoSqlDb
returns a pointer to one of the Database object of a Mojo::Pg instance.
=cut
sub mojoSqlDb {
shift->db->mojoSqlDb;
};
=head2 $self->userInfo
returns a hash of information about the current user.
=cut
has userInfo => sub {
my $self = shift;
my $userId = $self->userId // return {};
if ($userId eq '__ROOT'){
return {cbuser_id => '__ROOT'};
}
if ($userId eq '__SHELL'){
return {cbuser_id => '__SHELL'};
}
$self->db->fetchRow('cbuser',{id=>$self->userId}) // {};
};
( run in 0.429 second using v1.01-cache-2.11-cpan-39bf76dae61 )