[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