On 13/09/2007, <b class="gmail_sendername">Ian Docherty</b> &lt;<a href="mailto:catalyst@iandocherty.com">catalyst@iandocherty.com</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I have found a thread on DBIx-class mailing list that throws some light<br>on this using<br><br><a href="http://search.cpan.org/~ash/DBIx-Class-0.08006/lib/DBIx/Class/Schema.pm#load_namespaces">http://search.cpan.org/~ash/DBIx-Class-0.08006/lib/DBIx/Class/Schema.pm#load_namespaces
</a><br><br>This seems to solve the problem for putting such logic into the<br>Model/Schema but would it be better to put this type of logic into a<br>business logic layer? In which case how would I obtain a $schema object?
<br>Would I have to then pass this as a parameter to the method?<br><br>Regards<br>Ian<br><br><br>Ian Docherty wrote:<br>&gt; Hi<br>&gt;<br>&gt; My existing Catalyst application is being extended. I want to keep a<br>&gt; record of previous passwords used by a user to prevent them being
<br>&gt; re-used.<br>&gt;<br>&gt; I have Model &#39;UsedPassword&#39; to keep track of the previous 8 (say)<br>&gt; passwords as so-<br>&gt;<br>&gt; package MyApp::Schema::UsedPassword;<br>&gt; use strict;<br>&gt; use base qw(DBIx::Class);
<br>&gt;<br>&gt; __PACKAGE__-&gt;load_components(qw(PK::Auto Core));<br>&gt; __PACKAGE__-&gt;table(&#39;used_password&#39;);<br>&gt; __PACKAGE__-&gt;add_columns(qw(id user password));<br>&gt; __PACKAGE__-&gt;set_primary_key(&#39;id&#39;);
<br>&gt;<br>&gt; So, if I want a method (create_limited) to create a new UsedPassword<br>&gt; object, that ensures no more that 8 (say) passwords are stored in the<br>&gt; database (against each User) where should it go?<br>
&gt;<br>&gt; Ideally (I think) I would like to do something like<br>&gt;<br>&gt;&nbsp;&nbsp; $c-&gt;model(&#39;DBIC::UsedPassword&#39;)-&gt;create_limited({<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user&nbsp;&nbsp;&nbsp;&nbsp;=&gt; $user-&gt;id,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password =&gt; $password,
<br>&gt;&nbsp;&nbsp; });<br>&gt;<br>&gt; but i can&#39;t see how to add it to MyApp::Schema::UsedPassword (since<br>&gt; $c-&gt;model(&#39;DBIC::UsedPassword&#39;) returns a ResultSet not a<br>&gt; MyApp::Schema::UsedPassword)<br>&gt;
<br>&gt; Any other suggestions where to put it (polite one&#39;s only please)?<br>&gt;<br>&gt; Regards<br>&gt; Ian</blockquote><div><br>Isn&#39;t this just a case of adding a create_limited() method to your model class?<br>
<br>package MyApp::Schema::UsedPassword;<br>...<br>sub create_limited {<br>&nbsp; my( $self, $user, $password ) = @_;<br>&nbsp; # password checking logic here<br>}<br><br>In your controller:<br><br>$c-&gt;model(&#39;DBIC::UsedPassword&#39;)-&gt;create_limited( ... );
<br></div></div>