Thank you for the suggestions. The following snippet was helpful and a
good starting point.
I am confused as to when this object should be created? Everytime the user
clicks thru the pages, do I have to create a new admin using $session{id}
or will $session->{user} always be in their session? I can trust Perl to
store the User object in the session without problems?
Thank you
Ogden
On Tue, 13 Jun 2006, Mark Hedges wrote:
>
> TMTOWTDI.
>
> package User;
> use Scalar::Util qw( weaken );
> sub new {
> my $class = shift;
> my $self = { @_ };
> bless $self, $class;
> my $session = $self->{session};
> if ($session) {
> $session->{user} = $self;
> weaken $session->{user};
> }
> }
>
> sub username {
> my ($self) = @_;
> return scalar getpwuid( $self->{id} );
> }
>
> package Admin;
> use base qw( User );
>
> # code
> use Admin;
> my $user = Admin->new( session => \%session, id => 100 );
>
> # later code
> my $user = $session{user};
>
> # whatever code
> print $user->{id}, " is ", $user->username;
>
> Although at this point I would have used DBIx::Class, which rocks.
> Or Class::Std, which is also useful.
>
> Mark
>
> On Tue, 13 Jun 2006, John Li wrote:
>
> > From: John Li <[EMAIL PROTECTED]>
> > To: 'fixed' <[EMAIL PROTECTED]>, [email protected]
> > Date: Tue, 13 Jun 2006 10:15:36 -0700
> > Subject: Re: [Mason] Mason Design Advice
> >
> > I would do it this way:
> >
> > $session{User} = {
> > id => 100,
> > username => 'tim',
> > };
> >
> > display_id_and_username($session{User});
> >
> > John
> >
> >
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED] On Behalf Of fixed
> > Sent: Tuesday, June 13, 2006 6:51 AM
> > To: [email protected]
> > Subject: Re: [Mason] Mason Design Advice
> >
> > Thank you for the reply.
> >
> > I come from a Java background and what you wrote makes sense. However, am
> > I right in saying that you are creating a User object and storing this in
> > $session? Therefore, Mason will always have access to:
> >
> > $session{User}->get_id or other methods for this object?
> >
> > In many Perl examples I have seen, I have never seen them put objects in
> > the session, but things like:
> >
> > $session{id} = 100;
> > $session{username} = tim;
> > display_id_and_username($session{id}, $session{username});
> >
> > But I would prefer:
> > display_id_and_username($session{User}->{id},$session{User}->get_name);
> > or even better:
> > display_id_and_username(\$session);
> >
> > Is it good practise in Perl to put the object in the session and go from
> > there?
> >
> > Thank you
> >
> > Ogden
> >
> >
> > On Mon, 12 Jun 2006, Mark Hedges wrote:
> >
> > >
> > >
> > > On Mon, 12 Jun 2006, Ogden wrote:
> > > >
> > > > MyApp::do_something($session{User}.get_id());
> > >
> > > Are you a python or java programmer? ( . = concat, -> = deref )
> >
> > > package MyApp;
> > > use Perl6::Export::Attrs;
> > > sub do_something :Export( :DEFAULT ) {
> > > do_stuff();
> > > }
> > >
> > > # in mason...
> > >
> > > use MyApp;
> > > do_something( $session{User}->get_id() );
> > >
> > > There are 10,000 ways to do it in Perl. 80% of them are wrong.
> > > Your way doesn't sound half bad.
> > >
> > > You could, for example, write your own PerlAuthen/AuthzHandler
> > > that processes before Mason, and either redirects to the login
> > > if not authenticated or sets the user object into $r->pnotes...
> > > The the autohandler puts it into your session. Or a pre-process
> > > handler creates the session.
> > >
> > > Whatever works.
> > >
> > > Mark
> > >
> >
> >
> > _______________________________________________
> > Mason-users mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/mason-users
> >
> >
> >
> >
> > _______________________________________________
> > Mason-users mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/mason-users
> >
>
_______________________________________________
Mason-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mason-users