aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm4
-rw-r--r--perllib/FixMyStreet/App/Controller/Root.pm4
-rw-r--r--t/app/controller/report_display.t4
-rwxr-xr-xtemplates/web/base/errors/generic.html5
5 files changed, 13 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b18762648..993bb3535 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,8 @@
## Releases
* Unreleased
+ - Front end improvements:
+ - Improved 403 message, especially for private reports.
- Admin improvements:
- Add new roles system, to group permissions and apply to users.
- Bugfixes:
diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm
index f2f411635..9b90da161 100644
--- a/perllib/FixMyStreet/App/Controller/Report.pm
+++ b/perllib/FixMyStreet/App/Controller/Report.pm
@@ -1,5 +1,6 @@
package FixMyStreet::App::Controller::Report;
+use utf8;
use Moose;
use namespace::autoclean;
use JSON::MaybeXS;
@@ -156,9 +157,10 @@ sub load_problem_or_display_error : Private {
my $permissions = $c->stash->{_permissions} = $c->forward( 'check_has_permission_to',
[ qw/report_inspect report_edit_category report_edit_priority report_mark_private / ] );
if ( !$c->user || ($c->user->id != $problem->user->id && !($permissions->{report_inspect} || $permissions->{report_mark_private})) ) {
+ my $url = '/auth?r=report/' . $problem->id;
$c->detach(
'/page_error_403_access_denied',
- [ sprintf(_('That report cannot be viewed on %s.'), $c->stash->{site_name}) ]
+ [ sprintf(_('Sorry, you don’t have permission to do that. If you are the problem reporter, or a member of staff, please <a href="%s">sign in</a> to view this report.'), $url) ]
);
}
}
diff --git a/perllib/FixMyStreet/App/Controller/Root.pm b/perllib/FixMyStreet/App/Controller/Root.pm
index 340c930c2..2c7e28e5f 100644
--- a/perllib/FixMyStreet/App/Controller/Root.pm
+++ b/perllib/FixMyStreet/App/Controller/Root.pm
@@ -122,7 +122,9 @@ sub page_error_410_gone : Private {
sub page_error_403_access_denied : Private {
my ( $self, $c, $error_msg ) = @_;
- $c->detach('page_error', [ $error_msg || _("Sorry, you don't have permission to do that."), 403 ]);
+ $c->stash->{title} = _('Access denied');
+ $error_msg ||= _("Sorry, you don't have permission to do that.");
+ $c->detach('page_error', [ $error_msg, 403 ]);
}
sub page_error_400_bad_request : Private {
diff --git a/t/app/controller/report_display.t b/t/app/controller/report_display.t
index bde090dd1..bb5b0a72d 100644
--- a/t/app/controller/report_display.t
+++ b/t/app/controller/report_display.t
@@ -78,7 +78,7 @@ subtest "change report to non_public and check for 403 status" => sub {
ok $mech->get("/report/$report_id"), "get '/report/$report_id'";
is $mech->res->code, 403, "access denied";
is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
- $mech->content_contains('That report cannot be viewed on FixMyStreet.');
+ $mech->content_contains('permission to do that. If you are the problem reporter');
ok $report->update( { non_public => 0 } ), 'make report public';
};
@@ -94,7 +94,7 @@ subtest "check owner of report can view non public reports" => sub {
ok $mech->get("/report/$report_id"), "get '/report/$report_id'";
is $mech->res->code, 403, "access denied to user who is not report creator";
is $mech->uri->path, "/report/$report_id", "at /report/$report_id";
- $mech->content_contains('That report cannot be viewed on FixMyStreet.');
+ $mech->content_contains('permission to do that. If you are the problem reporter');
$mech->log_out_ok;
ok $report->update( { non_public => 0 } ), 'make report public';
};
diff --git a/templates/web/base/errors/generic.html b/templates/web/base/errors/generic.html
index 241b310de..e5c2ca0c1 100755
--- a/templates/web/base/errors/generic.html
+++ b/templates/web/base/errors/generic.html
@@ -1,11 +1,12 @@
-[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = loc('Error') %]
+[% DEFAULT title = loc('Error') %]
+[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = title %]
[% IF csrf_token ~%]
<input type="hidden" name="token" value="[% csrf_token %]">
[% END ~%]
<div class="confirmation-header confirmation-header--failure">
- <h1>[% loc('Error') %]</h1>
+ <h1>[% title %]</h1>
<p>[% message %]</p>
</div>