[prev] [thread] [next] [Date index for 2005/10/04]
>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 ); I've moved this into a general Application-Config-setup subroutine, which itself takes the parameters from a parameter class. So all my standalone script start with use MyApp::Param; use MyApp; my $conf = MyApp::Param; Myapp->init($conf) and from init I call LJ::CDBI->app($config->app); and the only thing I chane is using different Param classes like MyApp::SpecialApp::Param etc. and within Mason I do this at the beginning of each request in a custom mod_perl handler (which is subclassed from MasonX::WebApp). Doesn't look very beautiful , but getting all initalized at the right time wasn't so easy since ( my Apache Session and my Locale Maketext all use CDBI and they 'use' CDBI very "early" ) Hope that helps Rolf Schaufelberger rs@xxxxx.xx _______________________________________________ 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