Restrict access to the admin pages using fine-grained permissions

This commit is contained in:
2011-12-20 01:44:05 +00:00
parent fcea8eec59
commit 4a81b0ce7b
6 changed files with 39 additions and 3 deletions

View File

@@ -0,0 +1,12 @@
<?php
class StatusBoard_Permission {
const PERM_Administrator = 1;
const PERM_UpdateStatusBoards = 2;
const PERM_UpdateIncidents = 3;
const PERM_ViewStatusBoards = 4;
}
?>

View File

@@ -4,6 +4,10 @@ $main = StatusBoard_Main::instance();
$auth = $main->auth(); $auth = $main->auth();
$config = $main->config(); $config = $main->config();
if ( ! $auth->isAuthenticated() || ! $auth->hasPermission(StatusBoard_Permission::PERM_Administrator)) {
throw new StatusBoard_Exception_NotAuthorised();
}
$services = StatusBoard_Service::all(); $services = StatusBoard_Service::all();
$this->smarty->assign('services', $services); $this->smarty->assign('services', $services);

View File

@@ -2,6 +2,11 @@
$main = StatusBoard_Main::instance(); $main = StatusBoard_Main::instance();
$request = $main->request(); $request = $main->request();
$auth = $main->auth();
if ( ! $auth->isAuthenticated() || ! $auth->hasPermission(StatusBoard_Permission::PERM_UpdateIncidents)) {
throw new StatusBoard_Exception_NotAuthorised();
}
$service_id = $request->get('service', 'Sihnon_Exception_InvalidParameters'); $service_id = $request->get('service', 'Sihnon_Exception_InvalidParameters');
$site_id = $request->get('site', 'Sihnon_Exception_InvalidParameters'); $site_id = $request->get('site', 'Sihnon_Exception_InvalidParameters');
@@ -16,7 +21,7 @@ try {
$site = StatusBoard_Site::fromId($site_id); $site = StatusBoard_Site::fromId($site_id);
$incident = StatusBoard_Incident::fromId($incident_id); $incident = StatusBoard_Incident::fromId($incident_id);
} catch (Sihnon_Exception_ResultCountMismatch $e) { } catch (Sihnon_Exception_ResultCountMismatch $e) {
StatusBoard_Page::redirect('errors/404'); throw new StatusBoard_Exception_FileNotFound();
} }
$statuses = $incident->statusChanges(); $statuses = $incident->statusChanges();

View File

@@ -2,13 +2,18 @@
$main = StatusBoard_Main::instance(); $main = StatusBoard_Main::instance();
$request = $main->request(); $request = $main->request();
$auth = $main->auth();
if ( ! $auth->isAuthenticated() || ! $auth->hasPermission(StatusBoard_Permission::PERM_UpdateStatusBoards)) {
throw new StatusBoard_Exception_NotAuthorised();
}
$service_id = $request->get('id', 'Sihnon_Exception_InvalidParameters'); $service_id = $request->get('id', 'Sihnon_Exception_InvalidParameters');
$service = null; $service = null;
try { try {
$service = StatusBoard_Service::fromId($service_id); $service = StatusBoard_Service::fromId($service_id);
} catch (Sihnon_Exception_ResultCountMismatch $e) { } catch (Sihnon_Exception_ResultCountMismatch $e) {
StatusBoard_Page::redirect('errors/404'); throw new StatusBoard_Exception_FileNotFound();
} }
$sites = $service->sites(); $sites = $service->sites();

View File

@@ -4,4 +4,9 @@ $main = StatusBoard_Main::instance();
$auth = $main->auth(); $auth = $main->auth();
$config = $main->config(); $config = $main->config();
if ( ! $auth->isAuthenticated() || ! $auth->hasPermission(StatusBoard_Permission::PERM_Administrator)) {
throw new StatusBoard_Exception_NotAuthorised();
}
?> ?>

View File

@@ -2,6 +2,11 @@
$main = StatusBoard_Main::instance(); $main = StatusBoard_Main::instance();
$request = $main->request(); $request = $main->request();
$auth = $main->auth();
if ( ! $auth->isAuthenticated() || ! $auth->hasPermission(StatusBoard_Permission::PERM_UpdateStatusBoards)) {
throw new StatusBoard_Exception_NotAuthorised();
}
$service_id = $request->get('service', 'Sihnon_Exception_InvalidParameters'); $service_id = $request->get('service', 'Sihnon_Exception_InvalidParameters');
$site_id = $request->get('id', 'Sihnon_Exception_InvalidParameters'); $site_id = $request->get('id', 'Sihnon_Exception_InvalidParameters');
@@ -13,7 +18,7 @@ try {
$service = StatusBoard_Service::fromId($service_id); $service = StatusBoard_Service::fromId($service_id);
$site = StatusBoard_Site::fromId($site_id); $site = StatusBoard_Site::fromId($site_id);
} catch (Sihnon_Exception_ResultCountMismatch $e) { } catch (Sihnon_Exception_ResultCountMismatch $e) {
StatusBoard_Page::redirect('errors/404'); throw new StatusBoard_Exception_FileNotFound();
} }
$open_incidents = $site->openIncidents(); $open_incidents = $site->openIncidents();