<br><font size=2 face="sans-serif">------------------------------------------------------------------------------</font>
<br><font size=2 face="sans-serif">Leonard A. Jaffe &nbsp; &nbsp; &nbsp;(614)213-4283</font>
<br><font size=2 face="sans-serif">JP Morgan Chase, Columbus, OH &nbsp;
</font>
<br><font size=2 face="sans-serif">DSS Monitoring Instrumentation Services</font>
<br><font size=2 face="sans-serif">leonard.a.jaffe@jpmchase.com</font>
<br>
<br>
<br>
<br><font size=2 face="sans-serif">Bernhard Graf wrote:</font>
<br><font size=2 face="sans-serif">&gt; In a Cat application I use C:P::Authentication::Store::DBIC
and it works </font>
<br><font size=2 face="sans-serif">&gt; well.</font>
<br><font size=2 face="sans-serif">&gt; </font>
<br><font size=2 face="sans-serif">&gt; But now I need to modify authentication
a little bit:</font>
<br><font size=2 face="sans-serif">&gt; A status field of the user object
should also be checked, e.g. grant </font>
<br><font size=2 face="sans-serif">&gt; access only if status is set to
&quot;active&quot;.</font>
<br><font size=2 face="sans-serif">&gt; </font>
<br><font size=2 face="sans-serif">&gt; Documentation of the module mentions
a configuration field named </font>
<br><font size=2 face="sans-serif">&gt; &quot;catalyst_user_class&quot;:</font>
<br><font size=2 face="sans-serif">&gt; </font>
<br><font size=2 face="sans-serif">&gt; &lt;cite&gt;</font>
<br><font size=2 face="sans-serif">&gt; If using a plain model class which
has username and password fields is </font>
<br><font size=2 face="sans-serif">&gt; not working for you, because you
have more complex objects, or you need </font>
<br><font size=2 face="sans-serif">&gt; to do something else odd to fetch
those values or your role fields, you </font>
<br><font size=2 face="sans-serif">&gt; can subclass Catalyst::Plugin::Authentication::Store::DBIC::User,
and </font>
<br><font size=2 face="sans-serif">&gt; supply your class name here.</font>
<br><font size=2 face="sans-serif">&gt; &lt;/cite&gt;</font>
<br><font size=2 face="sans-serif">&gt; </font>
<br><font size=2 face="sans-serif">&gt; Is that the way I have to go? If
so an example would be helpful, because </font>
<br><font size=2 face="sans-serif">&gt; documentation for C:P::Authentication::Store::DBIC::User
is a little </font>
<br><font size=2 face="sans-serif">&gt; sparse. ;-)</font>
<br>
<br>
<br><font size=2 face="sans-serif">What you need to do is subclass C::P::A::Credential,
and override the </font>
<br><font size=2 face="sans-serif">login() method.</font>
<br>
<br><font size=2 face="sans-serif">The login method is where the username
and password are checked, so </font>
<br><font size=2 face="sans-serif">you probably want to &nbsp;do something
like the following (probably borrowing</font>
<br><font size=2 face="sans-serif">the password check form C::P::Authentication::CDBI):</font>
<br>
<br><font size=2 face="sans-serif">sub login {</font>
<br><font size=2 face="sans-serif">&nbsp; my ( $c, $user, $password, @rest
) = @_;</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; unless ($user) {</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp;$c-&gt;log-&gt;error(&quot;Can't
login a user without a user object or user ID&quot;);</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp;return;</font>
<br><font size=2 face="sans-serif">&nbsp; }</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; unless ( Scalar::Util::blessed($user)
and </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $user-&gt;isa(&quot;Catalyst::Plugin::Authentication::User&quot;)
) {</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; if ( my $user_obj = $c-&gt;get_user(
$user ) ) {</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; $user = $user_obj;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; } else {</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; $c-&gt;log-&gt;error(&quot;User
'$user' doesn't exist in the default store&quot;);</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; return;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; }</font>
<br><font size=2 face="sans-serif">&nbsp; }</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; # check the password...</font>
<br><font size=2 face="sans-serif">&nbsp; unless (some_password_check &amp;&amp;
$user-&gt;status eq 'Acitve') {</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; # some error message:
&nbsp;&quot;I'm sorry Dave, I can't do that.&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; }</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; </font>
<br><font size=2 face="sans-serif">&nbsp; $c-&gt;set_authenticated($user);</font>
<br><font size=2 face="sans-serif">&nbsp; $c-&gt;log-&gt;debug(&quot;Successfully
authenticated user &quot; . $user-&gt;id) if $c-&gt;debug;</font>
<br><font size=2 face="sans-serif">&nbsp; return 1;</font>
<br><font size=2 face="sans-serif">}</font>
<br>
<br>
<br><font size=2 face="sans-serif">Len.</font>

<HTML><BODY><P><hr size=1></P><br>
<P><br>
This transmission may contain information that is privileged,<br>
confidential, legally privileged, and/or exempt from disclosure<br>
under applicable law.  If you are not the intended recipient, you<br>
are hereby notified that any disclosure, copying, distribution, or<br>
use of the information contained herein (including any reliance<br>
thereon) is STRICTLY PROHIBITED.  Although this transmission and<br>
any attachments are believed to be free of any virus or other<br>
defect that might affect any computer system into which it is<br>
received and opened, it is the responsibility of the recipient to<br>
ensure that it is virus free and no responsibility is accepted by<br>
JPMorgan Chase & Co., its subsidiaries and affiliates, as<br>
applicable, for any loss or damage arising in any way from its use.<br>
If you received this transmission in error, please immediately<br>
contact the sender and destroy the material in its entirety,<br>
whether in electronic or hard copy format. Thank you.<br>
</P></BODY></HTML>