[prev] [thread] [next] [Date index for 2005/10/04]
On Tue, Oct 04, 2005 at 08:31:58PM +0200, Rolf Schaufelberger wrote: > >Hi! > > >I am trying to figure out a smart way of handling permissions in > >Class::DBI. The idea is having a kind of session object and pass that > >around. It is simple of you're only one user using the base class, but > >is really hard if you want to pass around different session > >objects. Has anybody here done that kind of thing? I have been > >searching through the archives and the Wiki but found noting. > > >Thanks, > >Patrik > > I'm usig a postres DB with several schemas in it and different connections. > Each connection has different rights and "sees" different schemas. > This works under Apache/mod_perl/Mason and with scripts started from shell. > > The main step is described in the WIKI with something like "running CDBI under > mod_perl..", it means you must have an own db_main method in your base class. > The next step I did is to feed this base class with a hash containing the > different connection parameters. > > So my base cdbi class looks like: > > ... > my $db_options = { > RaiseError => 1, > AutoCommit => 0, > FetchHashKeyName => 'NAME_lc', > ShowErrorStatement => 1, > ChopBlanks => 1, > RootClass => 'DBIx::ContextualFetch', > pg_server_prepare => 0 > }; > > # Default connection parametes > my $app = { DbDSN => 'dbi:Pg:dbname=baz', > DbUser => 'foo', > DbPass => 'bar', > DbSearchPath => '', # I need this for Postgres schemas > }; > > sub app { > my $class= shift; > $app = shift; > } > > sub db_Main { > my $self=shift; > my $dbh; > > if ( $ENV{'MOD_PERL'} and !$Apache::ServerStarting ) { > $dbh = Apache->request()->pnotes('dbh'); > } > if ( !$dbh ) { > # $app is my config hash > $dbh = DBI->connect_cached ( $app->{DbDSN}, > $app->{DbUser}, > $app->{DbPass}, > $db_options ); > > if ( $ENV{'MOD_PERL'} and !$Apache::ServerStarting ) { > Apache->request()->pnotes( 'dbh', $dbh ); > } > } > ... > > And I call it either from my mod_perl/Mason handler or from my standalone > script > LJ::CDBI->app( $app ); This actually looks remarkably similar to what we implemented in DBIx::Class::Schema (see compose_connection) http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/Schema.pm If anybody fancies back-porting this approach to Class::DBI I'd be happy to help out (this goes for the rest of DBIx::Class too, although most of it would probably be much more work than this would be). -- Matt S Trout Specialists in perl consulting, web development, and Technical Director UNIX/Linux systems architecture and automation. Mail Shadowcat Systems Ltd. mst (at) shadowcatsystems.co.uk for more information + Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ + _______________________________________________ ClassDBI mailing list ClassDBI@xxxxx.xxxxxxxxxxxxxxxx.xxx http://lists.digitalcraftsmen.net/mailman/listinfo/classdbi
Re [CDBI] session handling in cdbi
|
Re: Re [CDBI] session handling in cdbi
|
Generated at 10:29 on 10 Oct 2005 by mariachi v0.52