--- trunk/lib/SQLSession/Model/Query.pm 2007/01/25 18:19:02 60 +++ trunk/lib/SQLSession/Model/Query.pm 2007/01/25 19:05:04 61 @@ -4,6 +4,7 @@ package SQLSession::Model::Query; use Jifty::DBI::Schema; use SQLSession::Model::Database; +use Scalar::Defer; use SQLSession::Record schema { column name => @@ -30,18 +31,48 @@ type is 'text', label is 'Note', render as 'textarea', - since 0.0.2; + since '0.0.2'; column visible => type is 'boolean', default is 1, - since 0.0.3; + indexed, + since '0.0.3'; + + column owner => + refers_to SQLSession::Model::User by 'id', + label is 'Query owner', + default is defer { Jifty->web->current_user->id || 0 }, + mandatory, + since '0.0.6'; + + column created_on => + type is 'timestamp', + label is 'Created On', + default is defer { DateTime->now }, + filters are 'Jifty::DBI::Filter::DateTime', + since '0.0.6'; }; # Your model-specific methods go here. sub current_user_can { - return 1; + my $self = shift; + + my ($action,$item,$name) = @_; + + # prevent deep recursion for next rule + if ( $action && $item && $name && + $action eq 'read' && $item eq 'column' && ( $name eq 'owner' || $name eq 'visible' ) + ) { + return 1; + } + + if ( $self->visible || $self->owner == $self->current_user->id ) { + return 1; + }; + + return 0; } 1;