@@ -, +, @@ --- C4/Auth.pm | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) --- a/C4/Auth.pm +++ a/C4/Auth.pm @@ -2039,20 +2039,27 @@ sub haspermission { my $flags = getuserflags( $row, $userid ); return $flags if $flags->{superlibrarian}; - foreach my $module ( keys %$flagsrequired ) { - my $subperm = $flagsrequired->{$module}; - if ( $subperm eq '*' ) { - return 0 unless ( $flags->{$module} == 1 or ref( $flags->{$module} ) ); + my $subperms = $flagsrequired->{$module}; + my @sub_loop; + if ( ref($subperms) eq 'ARRAY' ) { + @sub_loop = @$subperms; } else { - return 0 unless ( - ( defined $flags->{$module} and - $flags->{$module} == 1 ) - or - ( ref( $flags->{$module} ) and - exists $flags->{$module}->{$subperm} and - $flags->{$module}->{$subperm} == 1 ) - ); + push @sub_loop, $subperms; + } + foreach my $subperm (@sub_loop){ + if ( $subperm eq '*' ) { + return 0 unless ( $flags->{$module} == 1 or ref( $flags->{$module} ) ); + } else { + return 0 unless ( + ( defined $flags->{$module} and + $flags->{$module} == 1 ) + or + ( ref( $flags->{$module} ) and + exists $flags->{$module}->{$subperm} and + $flags->{$module}->{$subperm} == 1 ) + ); + } } } return $flags; --