@@ -, +, @@ $ kshell k$ prove t/db_dependent/Koha/Object.t --- Koha/Object.pm | 35 +++++++++++++++++++++++++++++++++++ t/db_dependent/Koha/Object.t | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) --- a/Koha/Object.pm +++ a/Koha/Object.pm @@ -843,6 +843,19 @@ sub _get_object_class { return ${type}; } +sub _get_objects_class { + my ( $self ) = @_; + return unless $self; + + if ( $self->_result->can('koha_objects_class') ) { + return $self->_result->koha_objects_class; + } + my $type = ref($self); + + $type =~ s|Schema::Result::||; + return $type . "s"; +} + =head3 AUTOLOAD The autoload method is used only to get and set values for an objects properties. @@ -922,6 +935,28 @@ sub _handle_to_api_child { return $res; } +=head3 accessible + + if ( $object->accessible ) { ... } + +Whether the object should be accessible in the current context (requesting user). +It relies on the plural class properly implementing the I method. + +=cut + +sub accessible { + my ($self) = @_; + + return $self->_get_objects_class->search_limited( + { + map { $_ => $self->$_ } + $self->_result->result_source->primary_columns + } + )->count > 0 + ? 1 + : 0; +} + sub DESTROY { } =head1 AUTHOR --- a/t/db_dependent/Koha/Object.t +++ a/t/db_dependent/Koha/Object.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 21; +use Test::More tests => 22; use Test::Exception; use Test::Warn; use DateTime; @@ -996,3 +996,37 @@ subtest 'messages() and add_message() tests' => sub { $schema->storage->txn_rollback; }; + +subtest 'accessible() tests' => sub { + + plan tests => 2; + + $schema->storage->txn_begin; + + my $library_1 = $builder->build_object( { class => 'Koha::Libraries' } ); + my $library_2 = $builder->build_object( { class => 'Koha::Libraries' } ); + + my $patron = $builder->build_object( + { + class => 'Koha::Patrons', + value => { + flags => 2**2, # only has catalogue permissions + branchcode => $library_1->id + } + } + ); + + my $patron_1 = $builder->build_object( + { class => 'Koha::Patrons', value => { branchcode => $library_1->id } } + ); + my $patron_2 = $builder->build_object( + { class => 'Koha::Patrons', value => { branchcode => $library_2->id } } + ); + + t::lib::Mocks::mock_userenv( { patron => $patron } ); + + ok( $patron_1->accessible, 'Has access to the patron' ); + ok( !$patron_2->accessible, 'Does not have access to the patron' ); + + $schema->storage->txn_rollback; +}; --