diff options
-rw-r--r-- | perllib/FixMyStreet/DB/Result/User.pm | 10 | ||||
-rw-r--r-- | t/app/sendreport/inspection_required.t | 3 |
2 files changed, 13 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm index e44b2530f..19adf5d49 100644 --- a/perllib/FixMyStreet/DB/Result/User.pm +++ b/perllib/FixMyStreet/DB/Result/User.pm @@ -295,6 +295,16 @@ sub permissions { sub has_permission_to { my ($self, $permission_type, $body_ids) = @_; + # Nobody, including superusers, can have a permission which isn't available + # in the current cobrand. + my $cobrand = $self->result_source->schema->cobrand; + my $cobrand_perms = $cobrand->available_permissions; + my %available = map { %$_ } values %$cobrand_perms; + # The 'trusted' permission is never set in the cobrand's + # available_permissions (see note there in Default.pm) so include it here. + $available{trusted} = 1; + return 0 unless $available{$permission_type}; + return 1 if $self->is_superuser; return 0 if !$body_ids || (ref $body_ids && !@$body_ids); $body_ids = [ $body_ids ] unless ref $body_ids; diff --git a/t/app/sendreport/inspection_required.t b/t/app/sendreport/inspection_required.t index 73bdd14f7..c8cb30592 100644 --- a/t/app/sendreport/inspection_required.t +++ b/t/app/sendreport/inspection_required.t @@ -5,6 +5,9 @@ use FixMyStreet::SendReport::Email; ok( my $mech = FixMyStreet::TestMech->new, 'Created mech object' ); +use_ok 'FixMyStreet::Cobrand'; +FixMyStreet::DB->schema->cobrand(FixMyStreet::Cobrand::FixMyStreet->new()); + my $user = $mech->create_user_ok( 'user@example.com' ); my $body = $mech->create_body_ok( 2237, 'Oxfordshire County Council'); |