apacheを使っていればmod_perlを入れて、Redmine.pmをperl/Apacheにコピーする手順がググると出てきます。
このRedmine.pmの認証では
sub RedmineDSN {
my ($self, $parms, $arg) = @_;
$self->{RedmineDSN} = $arg;
my $query = "SELECT
users.hashed_password, users.salt, users.auth_source_id, roles.permissions, projects.status
FROM projects, users, roles
WHERE
users.login=?
AND projects.identifier=?
AND users.status=1
AND (
roles.id IN (SELECT member_roles.role_id FROM members, member_roles WHERE members.user_id = users.id AND members.project_id = projects.id AND members.id = member_roles.member_id)
OR
(cast(projects.is_public as CHAR) IN ('t', '1')
AND (roles.builtin=1
OR roles.id IN (SELECT member_roles.role_id FROM members, member_roles, users g
WHERE members.user_id = g.id AND members.project_id = projects.id AND members.id = member_roles.member_id
AND g.type = 'GroupNonMember'))
)
)
AND roles.permissions IS NOT NULL";
$self->{RedmineQuery} = trim($query);
}
こんなSQLを使っているようです。
一つのプロジェクトに複数のリポジトリを追加したんだけど、認証出来ないよ!
他のプロジェクトと同じような設定にしてるのに、なぜかこのリポジトリだけ認証できないよ!
なんていうことが起きますw
つまり、
「プロジェクトのidentifierとプロジェクトに登録したリポジトリのidentifierが同じじゃないとだめ」
ということになりますね。
このコピーしたRedmine.pmはSVNの認証用にコピーしてるわけだから、RedmineDbWhereClauseなんかちまちま変更しないで、いっそのこと直接手を加えてやればいいのです。
AND projects.identifier=?
この部分を
AND EXISTS (SELECT 'x' FROM repositories WHERE project_id = projects.id AND identifier = ?)
に変更して、apachectrl gracefulを実行すれば完了!
※PerlにコピーしたRedmine.pmを修正してください。























