From: Marius Gavrilescu Date: Fri, 21 Feb 2014 21:03:04 +0000 (+0200) Subject: Let owners access their jobs/problems/contests X-Git-Url: http://git.ieval.ro/?a=commitdiff_plain;h=ce37ae0ca1e9ca129b944b424c7fefde74c07134;p=plack-app-gruntmaster.git Let owners access their jobs/problems/contests --- diff --git a/app.psgi b/app.psgi index 62a6f79..f975385 100644 --- a/app.psgi +++ b/app.psgi @@ -30,10 +30,13 @@ sub some_auth_required { sub admin_required { local $_ = $_[0]; - return 1 if m,^/pb/$word, && problem_private $1; - return 1 if m,^/log/(?:job|src)/$word, && job_private $1; - return 1 if m,^/ct/$word/(?:pb|log), && time < contest_start $1; - return 1 if m,^/ct/$word/log/src, && time < contest_end $1; + return problem_owner $1 if m,^/pb/$word, && problem_private $1; + return job_owner $1 if m,^/log/(?:job|src)/$word, && job_private $1; + return contest_owner $1 if m,^/ct/$word/(?:pb|log), && time < contest_start $1; + if (m,^/ct/$word/log/(?:job|src)/$word, && time < contest_end $1){ + local $Gruntmaster::Data::contest = $1; + return job_owner $2; + } 0 } @@ -43,7 +46,7 @@ sub require_admin { local *__ANON__ = "require_admin_middleware"; my $env = $_[0]; my $r = Plack::Request->new($env); - $env->{'gruntmaster.reqadmin'} = 1 if admin_required $r->path; + $env->{'gruntmaster.reqadmin'} = admin_required $r->path; $app->($env) } } @@ -66,7 +69,7 @@ sub authenticate { }; $authen_cache{$cache_key} = time; - return if $env->{'gruntmaster.reqadmin'} && !hascaps $user, 'gmadm'; + return if $env->{'gruntmaster.reqadmin'} && $env->{'gruntmaster.reqadmin'} ne $user && !hascaps $user, 'gmadm'; 1 }