モデルを追加しよう
続いて,
> jifty model --name Entry
Userモデルのほうはプラグインのほうで用意してくれた出来合いのスキーマを使いましたが,
use MyApp::Record schema {
column body =>
type is 'text';
column user_id =>
type is 'integer',
refers_to MyApp::Model::User;
column epoch =>
type is 'integer',
default is defer { time() };
};
一見裸のワードに見える単語がいくつも並んでいますが,
refers_
複雑なアクセスコントロールを実装する
このモデルは,
このような複雑なアクセスコントロールは,
sub current_user_can {
my ($self, $right, %args) = @_;
return 1 if $right eq 'read';
return 1 if $args{user_id} && $self->current_user->id == $args{user_id};
return 1 if $self->user_id && $self->current_user->id == $self->user_id;
return $self->SUPER::current_user_can($right, %args);
}
スキーマを更新しよう
モデルの処理としてはこれでひとまず完成ですが,
まずはlib/
sub { '0.0.2' }
続いてetc/
Database:
Version: 0.0.2
それが済んだら,
> jifty schema --setup
これで新しいモデルがデータベースに登録されました。もちろん生のSQLを書く必要はありません。
ディスパッチャもDSLで
モデルができたところで,
エディタでこのようなlib/
package MyApp::Dispatcher;
use strict;
use warnings;
use Jifty::Dispatcher -base;
under 'user/*' => [
run {
my ($name) = ($1);
my $user = MyApp::Model::User->load_by_cols(name => $name);
set user => $user;
},
on qr/(\d+)/ => run {
my ($epoch) = ($1);
my $user = get('user');
my $entry = MyApp::Model::Entry->load_by_cols(
user_id => $user->id,
epoch => $epoch,
);
set entry => $entry;
show '/entry';
},
on '' => show '/list',
];
1;
ここではhttp://
なお,