improved multitenancy support

This commit is contained in:
SJ
2013-01-05 16:42:36 +01:00
parent 7085f3c225
commit cafd477392
26 changed files with 417 additions and 39 deletions

View File

@@ -38,6 +38,7 @@ class ModelUserAuth extends Model {
$_SESSION['domain'] = $query->row['domain'];
$_SESSION['realname'] = $query->row['realname'];
$_SESSION['auditdomains'] = $this->model_user_user->get_users_all_domains($query->row['uid']);
$_SESSION['emails'] = $this->model_user_user->get_users_all_email_addresses($query->row['uid']);
$_SESSION['folders'] = $this->model_folder_folder->get_all_folder_ids($query->row['uid']);
$_SESSION['extra_folders'] = $this->model_folder_folder->get_all_extra_folder_ids($query->row['uid']);

View File

@@ -14,6 +14,7 @@ class ModelUserImport extends Model {
$mailAttrs = array("mail", "mailalternateaddress");
$memberAttrs = array("memberdn");
$filter="$mailAttr=*";
$ldap = new LDAP($host['ldap_host'], $host['ldap_binddn'], $host['ldap_bindpw']);
if($ldap->is_bind_ok() == 0) {
@@ -25,16 +26,17 @@ class ModelUserImport extends Model {
LOGGER("LDAP type: " . $host['type']);
if($host['type'] == "AD") {
$attrs = array("cn", "samaccountname", "proxyaddresses", "member", "mail");
$attrs = array("cn", "samaccountname", "proxyaddresses", "member", "mail", "displayname");
$mailAttr = "proxyaddresses";
$mailAttrs = array("mail", "proxyaddresses");
$memberAttrs = array("member");
$filter="(&(objectClass=user)($mailAttr=*))";
}
$query = $ldap->query($host['ldap_basedn'], "$mailAttr=*", $attrs );
$query = $ldap->query($host['ldap_basedn'], $filter, $attrs );
LOGGER("LDAP query: $mailAttr=* for basedn:" . $host['ldap_basedn']);
foreach ($query->rows as $result) {
@@ -87,9 +89,17 @@ class ModelUserImport extends Model {
}
$realname = '';
if($host['type'] == "AD") {
$realname = $result['displayname'];
} else {
$realname = $result['cn'];
}
$data[] = array(
'username' => preg_replace("/\n{1,}$/", "", $__emails[0]),
'realname' => $result['cn'],
'realname' => $realname,
'dn' => $result['dn'],
'samaccountname' => isset($result['samaccountname']) ? $result['samaccountname'] : '',
'emails' => preg_replace("/\n{1,}$/", "", $emails),

View File

@@ -82,6 +82,23 @@ class ModelUserUser extends Model {
}
public function get_users_all_domains($uid = 0) {
$data = array();
if($uid > 0) {
$query = $this->db->query("SELECT domain FROM " . TABLE_DOMAIN_USER . " WHERE uid=?", array((int)$uid));
if(isset($query->rows)) {
foreach ($query->rows as $q) {
array_push($data, $q['domain']);
}
}
}
return $data;
}
public function get_additional_uids($uid = 0) {
$data = array();
@@ -124,6 +141,19 @@ class ModelUserUser extends Model {
}
public function get_domains_by_uid($uid = 0) {
$domains = "";
$query = $this->db->query("SELECT domain FROM " . TABLE_DOMAIN_USER . " WHERE uid=?", array((int)$uid));
foreach ($query->rows as $q) {
$domains .= $q['domain'] . "\n";
}
return preg_replace("/\n$/", "", $domains);
}
public function get_primary_email_by_domain($uid = 0, $domain = '') {
$email = "";
@@ -320,6 +350,7 @@ class ModelUserUser extends Model {
if($ret == 0) { return -2; }
}
$this->update_domains_settings((int)$user['uid'], $user['domains']);
$this->update_group_settings((int)$user['uid'], $user['group']);
$this->update_folder_settings((int)$user['uid'], $user['folder']);
@@ -397,6 +428,7 @@ class ModelUserUser extends Model {
}
$this->update_domains_settings((int)$user['uid'], $user['domains']);
$this->update_group_settings((int)$user['uid'], $user['group']);
$this->update_folder_settings((int)$user['uid'], $user['folder']);
@@ -404,6 +436,28 @@ class ModelUserUser extends Model {
}
private function update_domains_settings($uid = -1, $domains = '') {
$__d = array();
if($uid <= 0) { return 0; }
$query = $this->db->query("DELETE FROM `" . TABLE_DOMAIN_USER . "` WHERE uid=?", array($uid));
$all_domains = $this->get_email_domains();
$submitted_domains = explode("\n", $domains);
foreach($submitted_domains as $d) {
$d = trim($d);
if($d && checkdomain($d, $all_domains) > 0) {
$query = $this->db->query("INSERT INTO `" . TABLE_DOMAIN_USER . "` (domain, uid) VALUES(?,?)", array($d, (int)$uid));
}
}
return 1;
}
private function update_group_settings($uid = -1, $group = '') {
$__g = array();