Checkpoint before final conversion.
Added getIpUsers method to Group.pm Group->getUsers and User->isInGroup both use getIpUsers Tests added to Group.t to verify that getIpUsers works.
This commit is contained in:
parent
29b317bec3
commit
8b8b4af41b
3 changed files with 118 additions and 14 deletions
|
|
@ -487,7 +487,6 @@ sub getScratchUsers {
|
|||
my $scratchFilter;
|
||||
return [] unless $scratchFilter = $self->scratchFilter();
|
||||
|
||||
my $sessionId = $self->session->db->quote($self->session->getId());
|
||||
my $time = $self->session->datetime->time();
|
||||
|
||||
$scratchFilter =~ s/\s//g;
|
||||
|
|
@ -511,6 +510,42 @@ EOQ
|
|||
return $self->session->db->buildArrayRef($query, [ @scratchPlaceholders ]);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getIpUsers ( )
|
||||
|
||||
Get the set of users allowed to be in this group via the lastIP recorded in
|
||||
the user's session and this group's IpFilter. The set is returned as an array ref.
|
||||
|
||||
If no IpFilter has been set for this group, returns an empty array ref.
|
||||
|
||||
=cut
|
||||
|
||||
sub getIpUsers {
|
||||
my $self = shift;
|
||||
my $IpFilter;
|
||||
return [] unless $IpFilter = $self->ipFilter();
|
||||
|
||||
my $time = $self->session->datetime->time();
|
||||
|
||||
$IpFilter =~ s/\s//g;
|
||||
my @filters = split /;/, $IpFilter;
|
||||
|
||||
my $query = "select userId,lastIP from userSession where expires > ?";
|
||||
|
||||
my $sth = $self->session->db->read($query, [ $self->session->datetime->time() ]);
|
||||
my %localCache = ();
|
||||
my @ipUsers = ();
|
||||
while (my ($userId, $lastIP) = $sth->array() ) {
|
||||
if (!exists $localCache{$lastIP}) {
|
||||
$localCache{$lastIP} = isInSubnet($lastIP, \@filters);
|
||||
}
|
||||
push @ipUsers, $userId if $localCache{$lastIP};
|
||||
}
|
||||
return \@ipUsers;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 find ( session, name )
|
||||
|
|
@ -672,6 +707,7 @@ sub getUsers {
|
|||
@{ $extGroup->getDatabaseUsers() },
|
||||
@{ $extGroup->getKarmaUsers() },
|
||||
@{ $extGroup->getScratchUsers() },
|
||||
@{ $extGroup->getIpUsers() },
|
||||
;
|
||||
}
|
||||
}
|
||||
|
|
@ -681,6 +717,7 @@ sub getUsers {
|
|||
@{ $self->getDatabaseUsers() },
|
||||
@{ $self->getKarmaUsers() },
|
||||
@{ $self->getScratchUsers() },
|
||||
@{ $self->getIpUsers() },
|
||||
;
|
||||
my @users = ( @localUsers, @externalUsers );
|
||||
return \@users;
|
||||
|
|
|
|||
|
|
@ -255,20 +255,11 @@ sub isInGroup {
|
|||
### The following several checks are to increase performance. If this section were removed, everything would continue to work as normal.
|
||||
return 1 if ($gid eq '7'); # everyone is in the everyone group
|
||||
return 1 if ($gid eq '1' && $uid eq '1'); # visitors are in the visitors group
|
||||
return 1 if ($gid eq '2' && $uid ne '1'); # if you're not a visitor, then you're a registered user
|
||||
return 1 if ($uid eq '3'); #Admin is in every group
|
||||
### Get data for auxillary checks.
|
||||
my $group = WebGUI::Group->new($self->session,$gid);
|
||||
my $isInGroup = $self->session->stow->get("isInGroup");
|
||||
### Check IP Address
|
||||
if ($group->get("ipFilter")) {
|
||||
my $ipFilter = $group->get("ipFilter");
|
||||
$ipFilter =~ s/\s+//g;
|
||||
my @ips = split(",",$ipFilter);
|
||||
my $ipMatch = WebGUI::Utility::isInSubnet($self->session->env->get("REMOTE_ADDR"), [ @ips ]);
|
||||
return 1 if $ipMatch;
|
||||
}
|
||||
return 0 if ($uid eq '1'); #Visitor is in no other groups
|
||||
return 1 if ($uid eq '3'); #Admin is in every group
|
||||
return 1 if ($gid eq '2' && $uid ne '1'); # if you're not a visitor, then you're a registered user
|
||||
### Look to see if we've already looked up this group.
|
||||
if ($isInGroup->{$uid}{$gid} eq '1') {
|
||||
return 1;
|
||||
|
|
@ -348,6 +339,13 @@ sub isInGroup {
|
|||
$self->session->stow->set("isInGroup",$isInGroup);
|
||||
return 1 if ($isInGroup->{$uid}{$gid});
|
||||
}
|
||||
if (my @ipUsers = @{ $group->getIpUsers() }) {
|
||||
foreach my $extUserId ( @ipUsers ) {
|
||||
$isInGroup->{$extUserId}{$gid} = 1;
|
||||
}
|
||||
$self->session->stow->set("isInGroup",$isInGroup);
|
||||
return 1 if ($isInGroup->{$uid}{$gid});
|
||||
}
|
||||
### Check for groups of groups.
|
||||
my $groups = $group->getGroupsIn(1);
|
||||
foreach (@{$groups}) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue