From 1c4585dae3a5f9b29d6eacd43303919119e2c6f0 Mon Sep 17 00:00:00 2001 From: Rob Vermaas Date: Wed, 10 Mar 2010 10:02:04 +0000 Subject: [PATCH] * hydra: project members can do stuff that the owner can do --- src/lib/Hydra/Helper/CatalystUtils.pm | 6 +- src/lib/Hydra/Schema/ProjectMembers.pm | 93 ++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 src/lib/Hydra/Schema/ProjectMembers.pm diff --git a/src/lib/Hydra/Helper/CatalystUtils.pm b/src/lib/Hydra/Helper/CatalystUtils.pm index e758d72c..8569a49d 100644 --- a/src/lib/Hydra/Helper/CatalystUtils.pm +++ b/src/lib/Hydra/Helper/CatalystUtils.pm @@ -139,9 +139,9 @@ sub requireProjectOwner { my ($c, $project) = @_; requireLogin($c) if !$c->user_exists; - - error($c, "Only the project owner or administrators can perform this operation.") - unless $c->check_user_roles('admin') || $c->user->username eq $project->owner->username; + + error($c, "Only the project members or administrators can perform this operation.") + unless $c->check_user_roles('admin') || $c->user->username eq $project->owner->username || defined $c->model('DB::ProjectMembers')->find({ project => $project, userName => $c->user->username }); } diff --git a/src/lib/Hydra/Schema/ProjectMembers.pm b/src/lib/Hydra/Schema/ProjectMembers.pm new file mode 100644 index 00000000..c3776eb7 --- /dev/null +++ b/src/lib/Hydra/Schema/ProjectMembers.pm @@ -0,0 +1,93 @@ +package Hydra::Schema::ProjectMembers; + +# Created by DBIx::Class::Schema::Loader +# DO NOT MODIFY THE FIRST PART OF THIS FILE + +use strict; +use warnings; + +use base 'DBIx::Class::Core'; + + +=head1 NAME + +Hydra::Schema::ProjectMembers + +=cut + +__PACKAGE__->table("ProjectMembers"); + +=head1 ACCESSORS + +=head2 project + + data_type: text + default_value: undef + is_foreign_key: 1 + is_nullable: 0 + size: undef + +=head2 username + + data_type: text + default_value: undef + is_foreign_key: 1 + is_nullable: 0 + size: undef + +=cut + +__PACKAGE__->add_columns( + "project", + { + data_type => "text", + default_value => undef, + is_foreign_key => 1, + is_nullable => 0, + size => undef, + }, + "username", + { + data_type => "text", + default_value => undef, + is_foreign_key => 1, + is_nullable => 0, + size => undef, + }, +); +__PACKAGE__->set_primary_key("project", "username"); + +=head1 RELATIONS + +=head2 project + +Type: belongs_to + +Related object: L + +=cut + +__PACKAGE__->belongs_to("project", "Hydra::Schema::Projects", { name => "project" }, {}); + +=head2 username + +Type: belongs_to + +Related object: L + +=cut + +__PACKAGE__->belongs_to( + "username", + "Hydra::Schema::Users", + { username => "username" }, + {}, +); + + +# Created by DBIx::Class::Schema::Loader v0.05003 @ 2010-03-10 10:46:50 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:/5E52ddbqTr6+kf+ixYZGA + + +# You can replace this text with custom content, and it will be preserved on regeneration +1;