<div><div class="gmail_quote">2010/12/15 Hernan Lopes <span dir="ltr">&lt;<a href="mailto:hernanlopes@gmail.com">hernanlopes@gmail.com</a>&gt;</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>
          &quot;password&quot; 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>
          &quot;role&quot; 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, &#39;admin&#39;);<br>
        insert into roles (id, role) values (2, &#39;gerente&#39;);<br>
        insert into roles (id, role) values (3, &#39;banidos&#39;);<br>
        insert into roles (id, role) values (4, &#39;funcionario&#39;);<br>
        insert into roles (id, role) values (5, &#39;secretaria&#39;);<br>
        <br>
        insert into users (nome, sobrenome, is_deleted, endereco, username, 
password, email) values (&#39;joe&#39;, &#39;silva&#39;, &#39;0&#39;, &#39;-&#39;, &#39;joe&#39;, &#39;silva&#39;, 
&#39;<a href="mailto:joe@silva.net" target="_blank">joe@silva.net</a>&#39;);<br>
        insert into users (nome, sobrenome, is_deleted, endereco, username, 
password, email) values (&#39;maria&#39;, &#39;gomes&#39;, &#39;0&#39;, &#39;-&#39;, &#39;maria&#39;, &#39;gomes&#39;, 
&#39;<a href="mailto:mariagomes@hotmail.com" target="_blank">mariagomes@hotmail.com</a>&#39;);<br>
        insert into users (nome, sobrenome, is_deleted, endereco, username, 
password, email) values (&#39;admin&#39;, &#39;admin&#39;, &#39;0&#39;, &#39;-&#39;, &#39;admin&#39;, &#39;admin&#39;, 
&#39;<a href="mailto:admin@admins.com" target="_blank">admin@admins.com</a>&#39;);<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 &#39;Catalyst::View::TT&#39;;<br>
        <br>
        __PACKAGE__-&gt;config(<br>
            # Set to 1 for detailed timer stats in your HTML as comments<br>
            TIMER   =&gt; 0,<br>
            # This is your wrapper template located in the &#39;root/src&#39;<br>
            WRAPPER =&gt; &#39;wrapper.tt2&#39;,<br>
            # Change default TT extension<br>
            TEMPLATE_EXTENSION =&gt; &#39;.tt2&#39;,<br>
            # Set the location for TT files<br>
            INCLUDE_PATH =&gt; [<br>
                    Example::Catalyst::Auth-&gt;path_to( &#39;root&#39;,  ),<br>
                ],<br>
        );<br>
        <br>
        __PACKAGE__-&gt;meta-&gt;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__-&gt;config() :<br>
        <br>
        default_view =&gt; &#39;TT&#39;,<br>
        ENCODING =&gt; &#39;utf-8&#39;,<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__-&gt;config-&gt;{&#39;Plugin::Authentication&#39;} = {<br>
                default =&gt; {<br>
                    class           =&gt; &#39;SimpleDB&#39;,<br>
        #           user_model      =&gt; &#39;DBICSchemamodel::Users&#39;,<br>
                    user_model      =&gt; &#39;DBICSchemamodel::User&#39;,<br>
                    password_type   =&gt; &#39;clear&#39;,<br>
                    user_role_user_field =&gt; &#39;user_id&#39;,<br>
                    user_role_role_field =&gt; &#39;role_id&#39;,<br>
                },<br>
            };<br>
        <br>
        8.3 and also insert the Store config<br>
        <br>
        __PACKAGE__-&gt;config-&gt;{&#39;Plugin::Cache&#39;}{backend} = { #DEFAULT backend<br>
          store =&gt; &quot;FastMmap&quot;,<br>
            class =&gt; &quot;Cache::FastMmap&quot;,<br>
              storage =&gt; &quot;/tmp/cache&quot;,<br>
                expires =&gt; 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>
        &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot;<br>
            &quot;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd</a>&quot;&gt;<br>
        &lt;html xmlns=&quot;<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>&quot;&gt;<br>
        &lt;head&gt;<br>
        &lt;/head&gt;<br>
        &lt;body&gt;<br>
        [%content%]<br>
        &lt;/body&gt;<br>
        &lt;/html&gt;<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-&gt;action eq $c-&gt;controller(&#39;root&#39;)-&gt;action_for(&#39;login&#39;)<br>
                || $c-&gt;action eq $c-&gt;controller(&#39;root&#39;)-&gt;action_for(&#39;index&#39;)<br>
                ) {<br>
                return 1;<br>
            }<br>
        <br>
            # If a user doesn&#39;t exist, force login<br>
            if (<br>
                !$c-&gt;user_exists<br>
                or (<br>
                    (<br>
                            !$c-&gt;check_user_roles(&#39;admin&#39;)<br>
                        and !$c-&gt;check_user_roles(&#39;gerente&#39;)<br>
                        and !$c-&gt;check_user_roles(&#39;funcionario&#39;)<br>
                    )<br>
                )<br>
              )<br>
            {<br>
                # Redirect the user to the login page<br>
                $c-&gt;forward(&#39;login&#39;);<br>
                  # Return 0 to cancel &#39;post-auto&#39; processing and prevent use of application<br>
                    return 0;<br>
                  }<br>
        <br>
            # User found, so return 1 to continue with processing after this &#39;auto&#39;<br>
            return 1;<br>
            }<br>
        <br>
        sub index :Path :Args(0) {<br>
            my ( $self, $c ) = @_;<br>
            $c-&gt;stash(template =&gt; \&#39;Welcome please &lt;a 
href=&quot;/login&quot;&gt;login&lt;/a&gt;&#39;); #or i could use: template =&gt; 
&#39;index.tt2&#39;, and create that file inside myapp/root<br>
        }<br>
        <br>
        sub hidden_page :Path(&#39;/hidden_page&#39;) :Args(0) {<br>
            my ( $self, $c ) = @_;<br>
            $c-&gt;stash( template =&gt; \&#39;CONTEÚDO ESCONDIDO&#39; );<br>
            }<br>
        <br>
        sub login : Path(&#39;/login&#39;) : Args(0) {<br>
            my ( $self, $c ) = @_;<br>
        <br>
                my $form = HTML::FormHandler-&gt;new({<br>
                    field_list =&gt; [<br>
                      username =&gt; {<br>
                          type =&gt; &#39;Text&#39;,<br>
                          label =&gt; &#39;Login&#39;,<br>
                          required =&gt; 1,<br>
                          required_message =&gt; &#39;Campo Requerido&#39;,<br>
                          },<br>
                      password =&gt; {<br>
                          type =&gt; &#39;Password&#39;,<br>
                          label =&gt; &#39;Password&#39;,<br>
                          required =&gt; 1,<br>
                          required_message =&gt; &#39;Campo Requerido&#39;,<br>
                          },<br>
                      submit =&gt; {<br>
                          type =&gt; &#39;Submit&#39;,<br>
                          value =&gt; &#39;Login&#39;,<br>
                          },<br>
                      ],<br>
                    });<br>
                $c-&gt;stash( template =&gt; \$form-&gt;render);<br>
        <br>
            # Get the username and password from form<br>
            my $username = $c-&gt;request-&gt;params-&gt;{username} || undef;<br>
            my $password = $c-&gt;request-&gt;params-&gt;{password} || undef;<br>
        <br>
            # If the username and password values were found in form<br>
            if ( defined($username) &amp;&amp; defined($password) ) {<br>
        <br>
                # Attempt to log the user in<br>
                if (<br>
                    $c-&gt;authenticate(<br>
                        {<br>
                            username =&gt; $username,<br>
                            password =&gt; $password<br>
                        }<br>
                    )<br>
                  )<br>
                {<br>
        <br>
                    $c-&gt;forward(&#39;hidden_page&#39;);<br>
        <br>
                    return;<br>
                }<br>
                else {<br>
        <br>
                    # Set an error message<br>
                    $c-&gt;stash-&gt;{error_msg} =<br>
         &quot;Login desconhecido. Verifique seu login e senha e tente novamente. &quot;;<br>
                }<br>
            }<br>
        <br>
            # If either of above don&#39;t work out, send to the login page<br>
            $c-&gt;detach(&#39;index&#39;) if ($c-&gt;user_exists);<br>
        }<br>
        <br>
        <br>
        <br>
        <br>
        sub logout : Path(&#39;/logout&#39;) : Args(0) {<br>
            my ( $self, $c ) = @_;<br>
        <br>
            # Clear the user&#39;s state<br>
            $c-&gt;logout;<br>
        <br>
            # Send the user to the starting point<br>
            $c-&gt;response-&gt;redirect( $c-&gt;uri_for(&#39;/&#39;) );<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__-&gt;many_to_many(&#39;roles&#39;, &#39;users_to_roles&#39; =&gt; &#39;role&#39;);<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__-&gt;many_to_many(&#39;users&#39;, &#39;users_to_roles&#39; =&gt; &#39;user&#39;);<br><br><br><br><br><br><div class="gmail_quote">2010/12/15 Luis Motta Campos <span dir="ltr">&lt;<a href="mailto:luismottacampos@yahoo.co.uk" target="_blank">luismottacampos@yahoo.co.uk</a>&gt;</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>
&gt; Valeu pela dica Lindolfo mas, tenho que fazer pelo metodo mais dificil mesmo,<br>
&gt; porque depois vou ter que implementar a criptografia, então acho melhor apanhar<br>
&gt; 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&lt;<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>&gt;<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&lt;<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>&gt;<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>