summaryrefslogtreecommitdiffstats
path: root/modules-available/permissionmanager/page.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/permissionmanager/page.inc.php')
-rw-r--r--modules-available/permissionmanager/page.inc.php27
1 files changed, 22 insertions, 5 deletions
diff --git a/modules-available/permissionmanager/page.inc.php b/modules-available/permissionmanager/page.inc.php
index 462d3163..63cbcb59 100644
--- a/modules-available/permissionmanager/page.inc.php
+++ b/modules-available/permissionmanager/page.inc.php
@@ -32,10 +32,17 @@ class Page_PermissionManager extends Page
PermissionDbUpdate::deleteRole($id);
} elseif ($action === 'saveRole') {
User::assertPermission('roles.edit');
- $roleID = Request::post("roleid", false, 'int');
- if ($roleID === false) {
- Message::addError('main.parameter-missing', 'roleid');
- Util::redirect('?do=permissionmanager');
+ $roleID = Request::post("roleid", Request::REQUIRED_EMPTY, 'int');
+ if ($roleID) {
+ $existing = GetPermissionData::getRole($roleID);
+ if ($existing === false) {
+ Message::addError('invalid-role-id', $roleID);
+ Util::redirect('?do=permissionmanager');
+ }
+ if ($existing['builtin']) {
+ Message::addError('builtin-role', $existing['rolename']);
+ Util::redirect('?do=permissionmanager');
+ }
}
$roleName = Request::post("rolename", '', 'string');
if (empty($roleName)) {
@@ -116,7 +123,17 @@ class Page_PermissionManager extends Page
$selectedLocations = array();
$roleid = Request::get("roleid", false, 'int');
if ($roleid !== false) {
- $data += GetPermissionData::getRoleData($roleid);
+ $role = GetPermissionData::getRoleData($roleid);
+ if ($role === false) {
+ Message::addError('invalid-role-id', $roleid);
+ Util::redirect('?do=permissionmanager');
+ }
+ if ($role['builtin']) {
+ // Copy the role, as it's builtin
+ $role['roleid'] = '';
+ $role['rolename'] .= ' (2)';
+ }
+ $data += $role;
$selectedPermissions = $data["permissions"];
$selectedLocations = $data["locations"];
}