$c->user_existsと$c->userについて*[CPAN][Catalyst]
(途中)
Catalyst::Plugin::Authenticationの設定値として、
use_sessionというものがあります。
use_session Whether or not to store the user's logged in state in the session, if the application is also using the Catalyst::Plugin::Session plugin. This value is set to true per default.
と、CPANには書かれているのですが、設定することでどのフローが変わるのか、よくわかりません。
で、調べてみて、一言で言うと、
(※Catalyst::Plugin::Authentication::Store::DBICを使う場合)
『もしセッションがあれば、認証チェック[$c->user_exists]のときに、
セッションに$c->session->{__user}があれば認証OKとみなすYO!』
ってことです。
要するに、認証が通っているかどうかは、session->{__user}があるかないか イコール
sessionkeyである、cookieがあるかないかで判断される、ということです。
メカニズムは非常にシンプル。
一方、$c->userのフローに目を向けてみると、
$c->userでは、 $c->session->{__user}の値で、(login_id)でサーチを行います。
ここで食い違いがあると、
$c->user内で$c->get_userは、
sub get_user { $c->{auth}{catalyst_user_class}->new( $id, @rest );
{デフォルトでは、catalyst_user_class = Catalyst::Plugin::Authentication::Store::DBIC::User}
sub new { my ( $class, $id, $config ) = @_;
なので、
catalyst_user_classのnew(実際にdbアクセスするところ)は、
- $c->login(Credential::Password)
- $c->user(Authentication)
の2つから利用されることになります。
したがって、catalyst_user_classを拡張する場合に、
newメソッドを、ログインフォームからのことだけを考えて実装してはだめで、
$c->userとして、sessionに入っているlogin_idもこの引数となることを前提にしなければなりません。
ここでかなりはまりましたwww
正規表現のオプションメモ
$path = '/home/user/(__value1*value2__)/(__value2/1000__)/(__value3__)/test.txt'; replace_with_variables( $path, { value1 => 1, value2 => 2, value3 => 1 } ); sub replace_with_variables { my ($path, $args) = @_; my $value1 = $args->{value1}; my $value2 = $args->{value2}; my $value3 = $args->{value3}; my @vals = $path =~ /\(__(.+?)__\)/g; my $count = 0; my @regex_map = map{ $count++; ["__________${count}" => $_ ] } @vals; for(@regex_map){ my $val_key = $_->[0]; $path =~ s/\(__(.+?)__\)/$val_key/o; } for(@regex_map){ $_->[1] =~ s/value1/$value1/g if $value1; $_->[1] =~ s/value2/$value2/g if $value2; $_->[1] =~ s/value3/$value3/g if $value3; my $error; { local $@; $_->[1] = eval( $_->[1] ); $error = $@; } if($error){ die 'eval missed'; } my $key = $_->[0]; my $val = $_->[1]; $path =~ s/$key/$val/; } return $path; }
というようなファイルパスを置換するモジュールを作成してたのですが、
最後の置換のところでちょっとしくったので、そこんとこメモ。
$path =~ s/$key/$val/o;
と、正規表現オプションのoを付けると、
/home/user/2/__________2/__________3/test.txt
っとな、置換が1度しか実行されない状態になります。
オプションoをきちんと確認。
「 /o => パターンを1回だけコンパイルする 」
ううん、、しっくりこないので、また明日調べるよ。
FC6 ver.2869のyumレポジトリがおかしい件について
メモとして。
wmware player のインストール。
runme.pl(vmware-any-any-update)してもインストールがうまくいかないよぉ。
って、ことで社内のlinux神(Sさん)に神頼み。。
さすると、天の仰せが(ぉ
kernel-develのパッケージだけi585(それ以外はi686)になってて、
insmodで落ちちゃってるとのことでした。
rpm -Uvh kernel-2.6.18-1.2869.fc6.i686.rpm \ kernel-devel-2.6.18-1.2869.fc6.i686.rpm \ kernel-headers-2.6.18-1.2869.fc6.i386.rpm --force
「どっかのyumレポジトリがおかしいんじゃないかな...」
って、自分じゃ絶対気付けません、 :'(
svnの属性 各ファイル・ディレクトリへの付加情報 [svn:ignore]]
svnでは、ファイル・ディレクトリに付随するものとして、
「リビジョン」だけではなく、「属性」と呼ばれるものが存在します。
属性とは、ファイル・ディレクトリの付加情報を示します。
この属性は、属性名と属性値から成っており、
属性名 | 属性値 |
name1 | var1 |
と設定することができます。
レポジトリには、「リビジョン」管理されて登録されます。
そして、属性名として、svnが既に規定しているものがいくつか存在します。
今回は、svn:ignoreについて。
svn:ignore
あるファイルやディレクトリを、レポジトリにいれたくない、svn statusで状態表示させたくない、
といったときに使用する属性になります。
属性の作成は、svn propsetコマンドで行い、
引数として、属性名と属性値、およびファイル(ディレクトリ)パスを渡します。
svn:ignore属性が取りうる値は、patternを表す文字列になります。
$ svn propset svn:ignore '*' trunk/tmp.txt
patternをひとつのファイルにまとめて共有化する場合
$ svn propset svn:ignore -F ignore_pattern.txt trunk/temporary/
ignore_patter.txt
temporary_*
上の例ではcommit後、
trunk/temporary/以下のtemporary_*という名前のファイルは無視されることになります。
なお、無視すべきファイルもsvn statusで表示させたい場合には、
--no-ignoreオプションを指定してください。
$ svn status --no-ignore
指定した属性と属性値を表示するコマンド。
$ svn proplist project -v Properties on project: svn:ignore: *
$ svk propset svn:ignore '*' .
SVK(subversionベースのバージョン管理ツール)
svkを触ってみました。
SVK-v2.0.0 - A decentralized version control system - metacpan.org
svkとは..subversionをベースとしてperlで作られたバージョン管理ツールです。
開発レポジトリのミラーを個人レポジトリとしてローカルに作成することができ、
全体(レポジトリ)への影響をコントロールしながら開発を進めていくことができます。
個人レポジトリであれば、自由にコミットできるし、(ソース管理を自由に行える)
好きなときに全体レポジトリへ反映することもできます。(手間なく本線にマージ)
svk インストール
「svk インストール」でググると参考になるページが結構でてきますので、
ここでは割愛。
ただ、fedora coreの場合の簡単インストールだけご紹介です。(FC6で動作確認)
svkはperlベースのツールなので、CPANから落とすことができます。
cpan -i 'SVK'
ただし、SVN::Coreが無いと怒られます。なのに、SVN::CoreはCPANにない..
subversionのパッケージに付いているようなので、yumインストール。
yum install subversion-devel(必要ないかも) yum install subversion-perl
この際、yumで本体もいれてしまいましょう。
yum install perl-svk yum install perl-SVN-Mirror
SVN::MirrorはCPANからだとうまく入らなかったので、こちらもyumで。
CPANではうまく入らないので、yumで...ってのが増えてきたなぁと感じるこの頃です。
Image::MagickやらDBD::mysqlやら...
coreのレポジトリだけでも50個もあるよ(*0*)
(yum search perl- | grep core してみて。)
...yum様様です。
■
Catalyst::Plugin::Authentication::Store::DBIC::User - A user object representing an entry in a database. - metacpan.org
のrolesメソッドにおいて、
_search_rolesの実装、
$search->{ "me.$role_field" } = { -in => \@wanted_roles } if @wanted_roles;
rolesのカラムを、not nullにすべき。(∵ -in)
(途中)