Changeset 2343


Ignore:
Timestamp:
04/09/20 18:01:14 (4 years ago)
Author:
nanardon
Message:

Ensure user object alias works in acl

Location:
trunk/LATMOS-Accounts
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Acls/Acl.pm

    r1865 r2343  
    8686    # Foreach user, testing if this permission match: 
    8787    foreach my $u (@{ $self->{users} }) { 
     88        defined($u->{$perm}) or next; 
    8889        # Obj have attr eq login user 
    8990        if (substr($u->{user}, 0, 1) eq '$') { # check attr content 
     
    9293                my $val = $obj->_get_c_field($attribute) or return; 
    9394                my @vals = ref $val ? (@{ $val }) : ($val); 
    94                 return $u->{$perm} if (defined($u->{$perm}) && grep { $_ eq $who } @vals); 
     95                foreach (@vals) { 
     96                    my $uobj = $obj->base->get_object('user', $_) or next; 
     97                    return $u->{$perm} if ($uobj->id eq $who); 
     98                } 
    9599            } 
    96100        # user is in group 
    97101        } elsif (substr($u->{user}, 0, 1) eq '%') { # group 
    98102            my $group = substr($u->{user}, 1); 
    99             return $u->{$perm} if (defined($u->{$perm}) && grep { $group eq $_ } grep { $_ } @{$groups ||[]}); 
     103            return $u->{$perm} if (grep { $group eq $_ } grep { $_ } @{$groups ||[]}); 
    100104        # any user 
    101105        } elsif ($u->{user} eq '*' || $u->{user} eq $who) { 
    102106            # TODO deference alias for SQL base 
    103107            # $obj->base->get_objects(...) ? 
    104             return $u->{$perm} if (defined($u->{$perm})); 
     108            return $u->{$perm}; 
    105109        # any authenticated user 
    106110        } elsif (lc($u->{user}) eq '@authenticated' && $who) { 
    107             return $u->{$perm} if (defined($u->{$perm})); 
     111            return $u->{$perm}; 
    108112        # not login 
    109113        } elsif (lc($u->{user}) eq '@anonymous' && $who eq "") { 
    110             return $u->{$perm} if (defined($u->{$perm})); 
     114            return $u->{$perm}; 
    111115        } 
    112116    } 
  • trunk/LATMOS-Accounts/t/21_acls.t

    r1048 r2343  
    5454} 
    5555 
     56sub base { return $_[0] } 
     57 
     58sub get_object { return $_[0] } 
     59 
    5660sub type { 
    5761    $_[0]->{type} 
Note: See TracChangeset for help on using the changeset viewer.