Commit 4549a027 authored by Marius Cramer's avatar Marius Cramer

Implemented: FS#3240 - remote function to alter record permissions.

parent 89caa5a6
......@@ -199,6 +199,69 @@ class remoting {
}
}
/**
* set record permissions in any table
* @param string session_id
* @param string index_field
* @param string index_value
* @param array permissions
* @author "ispcomm", improved by M. Cramer <m.cramer@pixcept.de>
*/
public function update_record_permissions($tablename, $index_field, $index_value, $permissions) {
global $app;
if(!$this->checkPerm($session_id, 'admin_record_permissions')) {
$this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
return false;
}
foreach($permissions as $key => $value) { // make sure only sys_ fields are updated
switch($key) {
case 'sys_userid':
// check if userid is valid
$check = $app->db->queryOneRecord('SELECT userid FROM sys_user WHERE userid = ' . $app->functions->intval($value));
if(!$check || !$check['userid']) {
$this->server->fault('invalid parameters', $value . ' is no valid sys_userid.');
return false;
}
$value = $app->functions->intval($value);
break;
case 'sys_groupid':
// check if groupid is valid
$check = $app->db->queryOneRecord('SELECT groupid FROM sys_group WHERE groupid = ' . $app->functions->intval($value));
if(!$check || !$check['groupid']) {
$this->server->fault('invalid parameters', $value . ' is no valid sys_groupid.');
return false;
}
$value = $app->functions->intval($value);
break;
case 'sys_perm_user':
case 'sys_perm_group':
// check if permissions are valid
$value = strtolower($value);
if(!preg_match('/^[riud]+$/', $value)) {
$this->server->fault('invalid parameters', $value . ' is no valid permission string.');
return false;
}
$newvalue = '';
if(strpos($value, 'r') !== false) $newvalue .= 'r';
if(strpos($value, 'i') !== false) $newvalue .= 'i';
if(strpos($value, 'u') !== false) $newvalue .= 'u';
if(strpos($value, 'd') !== false) $newvalue .= 'd';
$value = $newvalue;
unset($newvalue);
break;
default:
$this->server->fault('invalid parameters', 'Only sys_userid, sys_groupid, sys_perm_user and sys_perm_group parameters can be changed with this function.');
break;
}
}
return $app->db->datalogUpdate( $tablename, $permissions, $index_field, $index_value ) ;
}
/**
Gets the ISPconfig version of the server
@param int session_id
......
<?php
$function_list['server_get,get_function_list,client_templates_get_all,server_get_serverid_by_ip,server_ip_add,server_ip_update,server_ip_delete'] = 'Server functions';
$function_list['admin_record_permissions'] = 'Record permission changes';
?>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment