From 8f6f6ee53e605131a84c6fa1d9ab3a5412fc2176 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 24 Mar 2009 14:22:59 +0000 Subject: [PATCH] * Allow authorised users to create projects. --- src/lib/Hydra/Controller/Project.pm | 18 +++++++++++++++--- src/root/project.tt | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/lib/Hydra/Controller/Project.pm b/src/lib/Hydra/Controller/Project.pm index d3490636..78e3761e 100644 --- a/src/lib/Hydra/Controller/Project.pm +++ b/src/lib/Hydra/Controller/Project.pm @@ -66,10 +66,20 @@ sub delete : Chained('project') PathPart Args(0) { } +sub requireMayCreateProjects { + my ($c) = @_; + + requireLogin($c) if !$c->user_exists; + + error($c, "Only administrators or authorised users can perform this operation.") + unless $c->check_user_roles('admin') || $c->check_user_roles('create-projects'); +} + + sub create : Path('/create-project') { my ($self, $c) = @_; - requireAdmin($c); + requireMayCreateProjects($c); $c->stash->{template} = 'project.tt'; $c->stash->{create} = 1; @@ -80,7 +90,7 @@ sub create : Path('/create-project') { sub create_submit : Path('/create-project/submit') { my ($self, $c) = @_; - requireAdmin($c); + requireMayCreateProjects($c); my $projectName = trim $c->request->params->{name}; @@ -88,8 +98,10 @@ sub create_submit : Path('/create-project/submit') { # Note: $projectName is validated in updateProject, # which will abort the transaction if the name isn't # valid. Idem for the owner. + my $owner = $c->check_user_roles('admin') + ? trim $c->request->params->{owner} : $c->user->username; my $project = $c->model('DB::Projects')->create( - {name => $projectName, displayname => "", owner => trim $c->request->params->{owner}}); + {name => $projectName, displayname => "", owner => $owner}); updateProject($c, $project); }); diff --git a/src/root/project.tt b/src/root/project.tt index e30927ba..ff2efd66 100644 --- a/src/root/project.tt +++ b/src/root/project.tt @@ -179,7 +179,7 @@ Owner: - [% INCLUDE maybeEditString param="owner" value=project.owner.username edit=(edit && c.check_user_roles('admin')) %] + [% INCLUDE maybeEditString param="owner" value=(project.owner.username || c.user.username) edit=(edit && c.check_user_roles('admin')) %] Enabled: