Catalyst Improving your Catalyst Application #53

Restricted resultsets

__PACKAGE__->load_components(qw/Schema::RestrictWithObject/);
package ...::User;
sub restrict_Foo_resultset {
   my $self = shift; # user object
   my $rs   = shift; # unrestricted resultset 
   return $self->related_resultset('foos');
   # or $rs->search({ user => $self });
}
my $schema = MyApp::Schema->connect(...);
my $user   = $schema->resultset('User')->find('jrockway');
my $restricted = $schema->restrict_with_object($user);

my $foo_rs = $restricted->resultset('Foo');
$foo_rs->delete; # only delete jrockway's foos!
Infinity Interactive