[Catalyst] Patch: DBIC schema support for A::Store::DBIC roles

Daniel Westermann-Clark daniel at acceleration.net
Thu Feb 2 17:27:07 CET 2006


Similar to draven's patch (changeset 3176) to A::Store::DBIC, here's a
patch to add support for roles based on a DBIC schema.

One related question: Is there a way to get A::Store::DBIC to use
schema instances (as opposed to a fully-qualified schema class)?
Ideally I would like to have something like:

package MyApp::Model::DBIC;
use base qw/Catalyst::Model DBIx::Class::Schema/;

sub COMPONENT {
    my ($self, $c, $config) = @_;

    return $self->connect(@{ $config->{connection} });    
}

And then have A::Store::DBIC use the instance, i.e.  the object
returned from $c->model('DBIC');.

-- 
Daniel Westermann-Clark
-------------- next part --------------
Auto-merging (0, 4906) /local/Catalyst-Plugin-Authentication-Store-DBIC to /mirror/Catalyst/trunk/Catalyst-Plugin-Authentication-Store-DBIC (base /mirror/Catalyst/trunk/Catalyst-Plugin-Authentication-Store-DBIC:4775).
Patching locally against mirror source http://dev.catalyst.perl.org/repos/Catalyst.
U   lib/Catalyst/Plugin/Authentication/Store/DBIC/User.pm
==== Patch <-> level 1
Source: 20164c6d-cd09-0410-925d-b4c4e616b846:/local/Catalyst-Plugin-Authentication-Store-DBIC:4906
Target: 4ad37cd2-5fec-0310-835f-b3785c72a374:/trunk/Catalyst-Plugin-Authentication-Store-DBIC:3176
        (http://dev.catalyst.perl.org/repos/Catalyst)
Log:

Add support for DBIC schemas for roles

=== lib/Catalyst/Plugin/Authentication/Store/DBIC/User.pm
==================================================================
--- lib/Catalyst/Plugin/Authentication/Store/DBIC/User.pm	(revision 3176)
+++ lib/Catalyst/Plugin/Authentication/Store/DBIC/User.pm	(patch - level 1)
@@ -12,12 +12,11 @@
     my ( $class, $id, $config ) = @_;
     
     # retrieve the user from the database
-    my ($uc) = $config->{auth}->{dbic_schema} ?
-    	       $config->{auth}->{dbic_schema}->resultset(
-	          $config->{auth}->{user_class}
-	       ) : $config->{auth}->{user_class};
-    my $user = $uc->search( { $config->{auth}->{user_field} => $id } )->first;
-    
+    my $user_class = $config->{auth}->{dbic_schema}
+        ? $config->{auth}->{dbic_schema}->resultset( $config->{auth}->{user_class} )
+        : $config->{auth}->{user_class};
+    my $user = $user_class->search( { $config->{auth}->{user_field} => $id } )->first;
+
     return unless $user;
 
     bless {
@@ -82,7 +81,7 @@
     $cfg->{user_role_role_field} ||= $cfg->{role_field};
     
     # optimized join if using DBIC
-    if ( $cfg->{role_class}->isa( 'DBIx::Class' ) ) {
+    if ( $cfg->{dbic_schema}->isa( 'DBIx::Class' ) || $cfg->{role_class}->isa( 'DBIx::Class' ) ) {
         my $search = { 
             $cfg->{role_rel} . '.' . $cfg->{user_role_user_field} 
                 => $self->user->id
@@ -92,7 +91,11 @@
                 -in => \@wanted_roles
             };
         }
-        my $rs = $cfg->{role_class}->search(
+
+        my $role_class = $cfg->{dbic_schema}
+            ? $cfg->{dbic_schema}->resultset( $cfg->{role_class} )
+            : $cfg->{role_class};
+        my $rs = $role_class->search(
             $search,
             { join => $cfg->{role_rel},
               cols => [ 'me.' . $role_field ], 

==== BEGIN SVK PATCH BLOCK ====
Version: svk 1.06 (linux)

eJyVVMtu3DYUHXTRhT+h2WjBIPZCHfGllxF1ErcBihZFgDyWHXBIakaILA1IyogRGkicLgu0QP+g
aP+zJMfW2OkkYwuCXvfwnMOre+8z9fJ4Bm1VJRbAxL54/VNZPmeGrx5CYkFqpWhMrwC1rTyTLcC2
7ZeA2I6dShfV/aC4fzBMLaXxDw1/I01VQUeXb+h+CBTXtIF1wUzfaVAE+rlRUgJo81lhZ9ifcwAL
q6WLBNq5kmeNbvrOCZMiSR3CwaFb3q9lN1d9b1wEI4RnyK9NLG97Leee3H2ZUQ9HwG0o4EWjJHeO
zv1umkWguloepOnV8i3OIUYevIMHIk80PWGGtefaBLV9jGhkJLsYi1uM0+ftsGy6IL+PGI/EdNeW
yS7i6ZPBrGTnfh4zPs/e1D4dMuqkO3RIcged6QuHlcHpPjU6qmW71Oid1abfP/3xJJjeJ5mOkvl1
qdVNKwHF9xObvtJSfbs+Dd73iWYb0RBl63V7PjfyrRGyNSwYwchKhCHktE4XVNSciwTluaQ5yRNa
IMQpoInvvF8mk7+X/zz45uPryeWvk/eXX01+//o3+e/k8tmf/P2H6eSPB3/9DAZnbc5bpnX0OAK8
7+pmGVfvmNvLhbuLRcPnmq/kKbs4iK6O7/YA40pJPbTGNfDhDuhW8iI6GknLLyOPA/D0PAqOvddt
MK60ZIqvDqN3nyOpG9mKi+hxFYFGRE43rupGaXN8cNt4o9lh9Mj9tLdleeK5H0VHkbWjS29A9a28
kbJ6+bk8Xefqf4hPEhTiW9abWbnOzKeQ49uOgpNteEZuTsFQs1elk8mCFEImRQ7d1dWOgBBmNaN0
QTFJs80sTOzBEyEiPazXvTJR3avI13G0sa/DB6+mDxw+ripkAUKbWf8yDOyyfNU1Z1Jp1j5Mrav5
NTMrN23dHHcvw9AIQHI7bXvO2rGP4k0fxbf7KA59FIem3Ux/gFOLEpgSnorYVX8RJwQmcYGoiBeE
E5nCdJGTtDpC9kvqRg3dm3upY5gFdcIEzrhAMa0ljxPs1HNM63iBs5zyDDGcEVAkd3JZ3jcLpc/B
fztDiTg=
==== END SVK PATCH BLOCK ====


More information about the Catalyst mailing list