<div><div class="gmail_quote">2010/12/15 Hernan Lopes <span dir="ltr"><<a href="mailto:hernanlopes@gmail.com">hernanlopes@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
vc tem que fazer o seguinte:<br><br>1. create a database<br>
        2. create tables:<br>
        <br>
        CREATE TABLE users<br>
        (<br>
         id serial NOT NULL,<br>
         nome text,<br>
         sobrenome text,<br>
         is_deleted integer DEFAULT 0,<br>
         endereco text,<br>
         created date DEFAULT now(),<br>
         username text,<br>
         "password" text,<br>
         telefone text,<br>
         email character varying(255),<br>
         CONSTRAINT users_pkey PRIMARY KEY (id)<br>
        );<br>
        <br>
        CREATE TABLE roles<br>
        (<br>
         id integer NOT NULL,<br>
         "role" text,<br>
         CONSTRAINT role_pkey PRIMARY KEY (id)<br>
        );<br>
        <br>
        <br>
        CREATE TABLE users_to_roles<br>
        (<br>
         user_id integer NOT NULL,<br>
         role_id integer NOT NULL,<br>
         CONSTRAINT users_to_roles_pkey PRIMARY KEY (user_id, role_id),<br>
         CONSTRAINT users_to_roles_role_id_fkey FOREIGN KEY (role_id)<br>
         REFERENCES roles (id) MATCH SIMPLE<br>
         ON UPDATE NO ACTION ON DELETE NO ACTION,<br>
         CONSTRAINT users_to_roles_user_id_fkey FOREIGN KEY (user_id)<br>
         REFERENCES users (id) MATCH SIMPLE<br>
         ON UPDATE NO ACTION ON DELETE NO ACTION<br>
        );<br>
        <br>
        2.1 add some data onto db:<br>
        <br>
        insert into roles (id, role) values (1, 'admin');<br>
        insert into roles (id, role) values (2, 'gerente');<br>
        insert into roles (id, role) values (3, 'banidos');<br>
        insert into roles (id, role) values (4, 'funcionario');<br>
        insert into roles (id, role) values (5, 'secretaria');<br>
        <br>
        insert into users (nome, sobrenome, is_deleted, endereco, username,
password, email) values ('joe', 'silva', '0', '-', 'joe', 'silva',
'<a href="mailto:joe@silva.net" target="_blank">joe@silva.net</a>');<br>
        insert into users (nome, sobrenome, is_deleted, endereco, username,
password, email) values ('maria', 'gomes', '0', '-', 'maria', 'gomes',
'<a href="mailto:mariagomes@hotmail.com" target="_blank">mariagomes@hotmail.com</a>');<br>
        insert into users (nome, sobrenome, is_deleted, endereco, username,
password, email) values ('admin', 'admin', '0', '-', 'admin', 'admin',
'<a href="mailto:admin@admins.com" target="_blank">admin@admins.com</a>');<br>
        <br>
        <br>
        insert into users_to_roles ( role_id, user_id ) values (1, 3);<br>
        insert into users_to_roles ( role_id, user_id ) values (2, 1);<br>
        insert into users_to_roles ( role_id, user_id ) values (2, 2);<br>
        <br>
        3. create a default catalyst app<br>
        <br>
        <a href="http://catalyst.pl" target="_blank">catalyst.pl</a> Example::Catalyst::Auth<br>
        cd Example-Catalyst-Auth/<br>
        <br>
        4. create TT view<br>
        <br>
        script/<a href="http://example_catalyst_auth_create.pl" target="_blank">example_catalyst_auth_create.pl</a> view TT<br>
        <br>
        5. open TT.pm file to edit<br>
        <br>
        vim lib/Example/Catalyst/Auth/View/TT.pm<br>
        <br>
        6. insert the following into your TT.pm<br>
        <br>
        package Example::Catalyst::Auth::View::TT;<br>
        use warnings;<br>
        use strict;<br>
        use base 'Catalyst::View::TT';<br>
        <br>
        __PACKAGE__->config(<br>
         # Set to 1 for detailed timer stats in your HTML as comments<br>
         TIMER => 0,<br>
         # This is your wrapper template located in the 'root/src'<br>
         WRAPPER => 'wrapper.tt2',<br>
         # Change default TT extension<br>
         TEMPLATE_EXTENSION => '.tt2',<br>
         # Set the location for TT files<br>
         INCLUDE_PATH => [<br>
         Example::Catalyst::Auth->path_to( 'root', ),<br>
         ],<br>
        );<br>
        <br>
        __PACKAGE__->meta->make_immutable;<br>
        <br>
        1;<br>
        <br>
        <br>
        7. now open the main ap config<br>
        <br>
        vim lib/Example/Catalyst/Auth.pm<br>
        <br>
        8. and insert inside your __PACKAGE__->config() :<br>
        <br>
        default_view => 'TT',<br>
        ENCODING => 'utf-8',<br>
        <br>
        8.1 and also declare these inside your use Catalyst qw//:<br>
        <br>
         Unicode<br>
        <br>
         StackTrace<br>
         Authentication<br>
         Authorization::Roles<br>
        <br>
        8.2 and insert the Auth configuration also.. on that same file:<br>
        <br>
        __PACKAGE__->config->{'Plugin::Authentication'} = {<br>
         default => {<br>
         class => 'SimpleDB',<br>
        # user_model => 'DBICSchemamodel::Users',<br>
         user_model => 'DBICSchemamodel::User',<br>
         password_type => 'clear',<br>
         user_role_user_field => 'user_id',<br>
         user_role_role_field => 'role_id',<br>
         },<br>
         };<br>
        <br>
        8.3 and also insert the Store config<br>
        <br>
        __PACKAGE__->config->{'Plugin::Cache'}{backend} = { #DEFAULT backend<br>
         store => "FastMmap",<br>
         class => "Cache::FastMmap",<br>
         storage => "/tmp/cache",<br>
         expires => 3600,<br>
         };<br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        8. create the wrapper:<br>
        <br>
        vim root/wrapper.tt2<br>
        <br>
        9. and insert this content:<br>
        <br>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"<br>
         "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd</a>"><br>
        <html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>"><br>
        <head><br>
        </head><br>
        <body><br>
        [%content%]<br>
        </body><br>
        </html><br>
        <br>
        10. now lets modify our Root controller.<br>
        We should create one index page (And test the view we setup is working)<br>
        We should create one hidden page, which will show only when logged in.<br>
        <br>
        vim lib/Example/Catalyst/Auth/Controller/Root.pm<br>
        <br>
        10.1 declare use HTML::FormHandler<br>
        <br>
        use HTML::FormHandler;<br>
        <br>
        11. delete index action and add the following:<br>
        <br>
        sub auto :Private {<br>
         my ($self, $c) =@_;<br>
        <br>
         if ( $c->action eq $c->controller('root')->action_for('login')<br>
         || $c->action eq $c->controller('root')->action_for('index')<br>
         ) {<br>
         return 1;<br>
         }<br>
        <br>
         # If a user doesn't exist, force login<br>
         if (<br>
         !$c->user_exists<br>
         or (<br>
         (<br>
         !$c->check_user_roles('admin')<br>
         and !$c->check_user_roles('gerente')<br>
         and !$c->check_user_roles('funcionario')<br>
         )<br>
         )<br>
         )<br>
         {<br>
         # Redirect the user to the login page<br>
         $c->forward('login');<br>
         # Return 0 to cancel 'post-auto' processing and prevent use of application<br>
         return 0;<br>
         }<br>
        <br>
         # User found, so return 1 to continue with processing after this 'auto'<br>
         return 1;<br>
         }<br>
        <br>
        sub index :Path :Args(0) {<br>
         my ( $self, $c ) = @_;<br>
         $c->stash(template => \'Welcome please <a
href="/login">login</a>'); #or i could use: template =>
'index.tt2', and create that file inside myapp/root<br>
        }<br>
        <br>
        sub hidden_page :Path('/hidden_page') :Args(0) {<br>
         my ( $self, $c ) = @_;<br>
         $c->stash( template => \'CONTEÚDO ESCONDIDO' );<br>
         }<br>
        <br>
        sub login : Path('/login') : Args(0) {<br>
         my ( $self, $c ) = @_;<br>
        <br>
         my $form = HTML::FormHandler->new({<br>
         field_list => [<br>
         username => {<br>
         type => 'Text',<br>
         label => 'Login',<br>
         required => 1,<br>
         required_message => 'Campo Requerido',<br>
         },<br>
         password => {<br>
         type => 'Password',<br>
         label => 'Password',<br>
         required => 1,<br>
         required_message => 'Campo Requerido',<br>
         },<br>
         submit => {<br>
         type => 'Submit',<br>
         value => 'Login',<br>
         },<br>
         ],<br>
         });<br>
         $c->stash( template => \$form->render);<br>
        <br>
         # Get the username and password from form<br>
         my $username = $c->request->params->{username} || undef;<br>
         my $password = $c->request->params->{password} || undef;<br>
        <br>
         # If the username and password values were found in form<br>
         if ( defined($username) && defined($password) ) {<br>
        <br>
         # Attempt to log the user in<br>
         if (<br>
         $c->authenticate(<br>
         {<br>
         username => $username,<br>
         password => $password<br>
         }<br>
         )<br>
         )<br>
         {<br>
        <br>
         $c->forward('hidden_page');<br>
        <br>
         return;<br>
         }<br>
         else {<br>
        <br>
         # Set an error message<br>
         $c->stash->{error_msg} =<br>
         "Login desconhecido. Verifique seu login e senha e tente novamente. ";<br>
         }<br>
         }<br>
        <br>
         # If either of above don't work out, send to the login page<br>
         $c->detach('index') if ($c->user_exists);<br>
        }<br>
        <br>
        <br>
        <br>
        <br>
        sub logout : Path('/logout') : Args(0) {<br>
         my ( $self, $c ) = @_;<br>
        <br>
         # Clear the user's state<br>
         $c->logout;<br>
        <br>
         # Send the user to the starting point<br>
         $c->response->redirect( $c->uri_for('/') );<br>
        }<br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        <br>
        12. now create your schema:<br>
        <br>
        script/<a href="http://example_catalyst_auth_create.pl" target="_blank">example_catalyst_auth_create.pl</a> model DBICSchemamodel
DBIC::Schema Example::Catalyst::Auth::DBSchema create=static
dbi:Pg:dbname=test_auth dblogin password<br>
        <br>
        13. add many_to_many relationships to model User<br>
        <br>
        vim lib/Example/Catalyst/Auth/DBSchema/Result/User.pm<br>
        <br>
        14. insert before make_immutable or 1<br>
        <br>
        __PACKAGE__->many_to_many('roles', 'users_to_roles' => 'role');<br>
        <br>
        15. add many_to_many relationships to model Role<br>
        <br>
        vim lib/Example/Catalyst/Auth/DBSchema/Result/Role.pm<br>
        <br>
        14. insert before make_immutable or 1<br>
        <br>
        __PACKAGE__->many_to_many('users', 'users_to_roles' => 'user');<br><br><br><br><br><br><div class="gmail_quote">2010/12/15 Luis Motta Campos <span dir="ltr"><<a href="mailto:luismottacampos@yahoo.co.uk" target="_blank">luismottacampos@yahoo.co.uk</a>></span><div>
<div></div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex"><div>On 15 Dec 2010, at 16:27, Jonhnes Lopes wrote:<br>
> Valeu pela dica Lindolfo mas, tenho que fazer pelo metodo mais dificil mesmo,<br>
> porque depois vou ter que implementar a criptografia, então acho melhor apanhar<br>
> logo pra aprender o Authentication. Mas, obrigado mesmo pela dica.<br>
<br>
</div>Ahn... criptografia para a WWW é, até onde eu sei, um problema da camada de transporte. Por quê você está tentando encriptar as credenciais na camada de sessão?<br>
<br>
Putamplexos<br>
<font color="#888888">--<br>
Luis Motta Campos is a software engineer,<br>
Perl Programmer, foodie and photographer.<br>
</font><div><div></div><div><br>
=begin disclaimer<br>
Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div></div></blockquote></div></div></div><br>
<br>=begin disclaimer<br>
Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><meta http-equiv="content-type" content="text/html; charset=utf-8">E você Hernan, tem de aprender a usar algum pastebin da vida...<div><br></div>-- <br><font face="georgia, serif">Alexei Znamensky [russoz_gmail_com] [<a href="http://russoz.wordpress.com" target="_blank">russoz.wordpress.com</a>] [<a href="http://www.flickr.com/photos/alexeiz" target="_blank">www.flickr.com/photos/alexeiz</a>]<br>
<span style="border-collapse:collapse"><div>«Only love / Can bring the rain / That makes you yearn to the sky»</div></span></font><br>
</div>