rewrite of the accounts classes:

- new cleaner AND documented interfaces
- old interfaces are still availible, but depricated
- LDAP backend stores now membership information in LDAP too, and does NO longer require the phpgwAccount schema
- LDAP backend deals now well with LDAP schema in which posixGroup is no structural object (eg. newer SuSE distros)
- password from users are done now binded as that user, so if you dont need/use our admin to manage accounts, you can give a root-dn which only allows to search&read accounts
This commit is contained in:
Ralf Becker 2006-06-06 23:42:56 +00:00
parent 98d8b30761
commit 6557128ec6
3 changed files with 23 additions and 151 deletions

View File

@ -109,16 +109,8 @@
$account_id = (int)$_POST['account_id']; $account_id = (int)$_POST['account_id'];
$old_group_list = $GLOBALS['egw']->acl->get_ids_for_location($account_id,1,'phpgw_group'); // delete all acl (and memberships) of group
$GLOBALS['egw']->acl->delete_account($account_id);
@reset($old_group_list);
while($old_group_list && $id = each($old_group_list))
{
$GLOBALS['egw']->acl->delete_repository('phpgw_group',$account_id,(int)$id[1]);
$GLOBALS['egw']->session->delete_cache((int)$id[1]);
}
$GLOBALS['egw']->acl->delete_repository('%%','run',$account_id);
if (! @rmdir($GLOBALS['egw_info']['server']['files_dir'].SEP.'groups'.SEP.$GLOBALS['egw']->accounts->id2name($account_id))) if (! @rmdir($GLOBALS['egw_info']['server']['files_dir'].SEP.'groups'.SEP.$GLOBALS['egw']->accounts->id2name($account_id)))
{ {
@ -191,15 +183,6 @@
return False; return False;
} }
$temp_users = ($_POST['account_user']?$_POST['account_user']:Array());
$account_user = Array();
@reset($temp_users);
while(list($key,$user_id) = each($temp_users))
{
$account_user[$user_id] = ' selected';
}
@reset($account_user);
$group_permissions = ($_POST['account_apps']?$_POST['account_apps']:Array()); $group_permissions = ($_POST['account_apps']?$_POST['account_apps']:Array());
$account_apps = Array(); $account_apps = Array();
@reset($group_permissions); @reset($group_permissions);
@ -215,7 +198,7 @@
$group_info = Array( $group_info = Array(
'account_id' => ($_POST['account_id']?(int)$_POST['account_id']:0), 'account_id' => ($_POST['account_id']?(int)$_POST['account_id']:0),
'account_name' => ($_POST['account_name']?$_POST['account_name']:''), 'account_name' => ($_POST['account_name']?$_POST['account_name']:''),
'account_user' => $account_user, 'account_user' => $_POST['account_user'],
'account_apps' => $account_apps 'account_apps' => $account_apps
); );
@ -237,6 +220,8 @@
// do the following only if we got an id - the create succided // do the following only if we got an id - the create succided
if ($group_info['account_id']) if ($group_info['account_id'])
{ {
$group->set_members($group_info['account_user'],$group_info['account_id']);
$apps =& CreateObject('phpgwapi.applications',$group_info['account_id']); $apps =& CreateObject('phpgwapi.applications',$group_info['account_id']);
$apps->update_data(Array()); $apps->update_data(Array());
reset($group_info['account_apps']); reset($group_info['account_apps']);
@ -247,38 +232,6 @@
} }
$apps->save_repository(); $apps->save_repository();
$acl =& CreateObject('phpgwapi.acl',$group_info['account_id']);
$acl->read_repository();
@reset($group_info['account_user']);
while(list($user_id,$dummy) = each($group_info['account_user']))
{
if(!$dummy)
{
continue;
}
$acl->add_repository('phpgw_group',$group_info['account_id'],$user_id,1);
$docommit = False;
$GLOBALS['pref'] =& CreateObject('phpgwapi.preferences',$user_id);
$t = $GLOBALS['pref']->read_repository();
@reset($new_apps);
while(is_array($new_apps) && list($app_key,$app_name) = each($new_apps))
{
if (!$t[($app_name=='admin'?'common':$app_name)])
{
$GLOBALS['egw']->hooks->single('add_def_pref', $app_name);
$docommit = True;
}
}
if ($docommit)
{
$GLOBALS['pref']->save_repository();
}
}
$acl->save_repository();
$basedir = $GLOBALS['egw_info']['server']['files_dir'] . SEP . 'groups' . SEP; $basedir = $GLOBALS['egw_info']['server']['files_dir'] . SEP . 'groups' . SEP;
$cd = 31; $cd = 31;
umask(000); umask(000);
@ -397,15 +350,6 @@
return False; return False;
} }
$temp_users = ($_POST['account_user']?$_POST['account_user']:Array());
$account_user = Array();
@reset($temp_users);
while($temp_users && list($key,$user_id) = each($temp_users))
{
$account_user[$user_id] = ' selected';
}
@reset($account_user);
$group_permissions = ($_POST['account_apps']?$_POST['account_apps']:Array()); $group_permissions = ($_POST['account_apps']?$_POST['account_apps']:Array());
$account_apps = Array(); $account_apps = Array();
@reset($group_permissions); @reset($group_permissions);
@ -421,10 +365,11 @@
$group_info = Array( $group_info = Array(
'account_id' => ($_POST['account_id']?(int)$_POST['account_id']:0), 'account_id' => ($_POST['account_id']?(int)$_POST['account_id']:0),
'account_name' => ($_POST['account_name']?$_POST['account_name']:''), 'account_name' => ($_POST['account_name']?$_POST['account_name']:''),
'account_user' => $account_user, 'account_user' => $_POST['account_user'],
'account_apps' => $account_apps 'account_apps' => $account_apps
); );
_debug_array($_POST);
_debug_array($group_info);
$this->validate_group($group_info); $this->validate_group($group_info);
$group =& CreateObject('phpgwapi.accounts',$group_info['account_id'],'g'); $group =& CreateObject('phpgwapi.accounts',$group_info['account_id'],'g');
@ -470,28 +415,7 @@
$cd = 33; $cd = 33;
} }
// Set group acl $group->set_members($group_info['account_user'],$group_info['account_id']);
$acl =& CreateObject('phpgwapi.acl',$group_info['account_id']);
$old_group_list = $acl->get_ids_for_location($group_info['account_id'],1,'phpgw_group');
if (is_array($old_group_list))
{
foreach($old_group_list as $key => $user_id)
{
$acl->delete_repository('phpgw_group',$group_info['account_id'],$user_id);
}
}
if (is_array($group_info['account_user']))
{
foreach($group_info['account_user'] as $user_id => $dummy)
{
if(!$dummy)
{
continue;
}
$acl->add_repository('phpgw_group',$group_info['account_id'],$user_id,1);
}
}
// This is down here so we are sure to catch the acl changes // This is down here so we are sure to catch the acl changes
// for LDAP to update the memberuid attribute // for LDAP to update the memberuid attribute
@ -771,6 +695,9 @@
$account =& CreateObject('phpgwapi.accounts',$_userData['account_id'],'u'); $account =& CreateObject('phpgwapi.accounts',$_userData['account_id'],'u');
$account->update_data($_userData); $account->update_data($_userData);
$account->save_repository(); $account->save_repository();
$account->set_memberships($_userData['account_groups'],$_userData['account_id']);
if ($_userData['account_passwd']) if ($_userData['account_passwd'])
{ {
$auth =& CreateObject('phpgwapi.auth'); $auth =& CreateObject('phpgwapi.auth');
@ -797,35 +724,7 @@
} }
$apps->save_repository(); $apps->save_repository();
$account =& CreateObject('phpgwapi.accounts',$_userData['account_id'],'u');
$allGroups = $account->get_list('groups');
if ($_userData['account_groups'])
{
reset($_userData['account_groups']);
while (list($key,$value) = each($_userData['account_groups']))
{
$newGroups[$value] = $value;
}
}
$acl =& CreateObject('phpgwapi.acl',$_userData['account_id']); $acl =& CreateObject('phpgwapi.acl',$_userData['account_id']);
reset($allGroups);
while (list($key,$groupData) = each($allGroups))
{
/* print "$key,". $groupData['account_id'] ."<br>";*/
/* print "$key,". $_userData['account_groups'][1] ."<br>"; */
if ($newGroups[(string) $groupData['account_id']])
{
$acl->add_repository('phpgw_group',$groupData['account_id'],$_userData['account_id'],1);
}
else
{
$acl->delete_repository('phpgw_group',$groupData['account_id'],$_userData['account_id']);
}
}
if ($_userData['anonymous']) if ($_userData['anonymous'])
{ {
$acl->add_repository('phpgwapi','anonymous',$_userData['account_id'],1); $acl->add_repository('phpgwapi','anonymous',$_userData['account_id'],1);
@ -845,26 +744,6 @@
$GLOBALS['egw']->session->delete_cache((int)$_userData['account_id']); $GLOBALS['egw']->session->delete_cache((int)$_userData['account_id']);
} }
function load_group_users($account_id)
{
$temp_user = $GLOBALS['egw']->acl->get_ids_for_location($account_id,1,'phpgw_group');
if(!$temp_user)
{
return Array();
}
else
{
$group_user = $temp_user;
}
$account_user = Array();
while (list($key,$user) = each($group_user))
{
$account_user[$user] = ' selected';
}
@reset($account_user);
return $account_user;
}
function load_group_managers($account_id) function load_group_managers($account_id)
{ {
$temp_user = $GLOBALS['egw']->acl->get_ids_for_location($account_id,EGW_ACL_GROUP_MANAGERS,'phpgw_group'); $temp_user = $GLOBALS['egw']->acl->get_ids_for_location($account_id,EGW_ACL_GROUP_MANAGERS,'phpgw_group');

View File

@ -20,7 +20,6 @@
function add_user($userData) function add_user($userData)
{ {
$userData['account_expires'] = $userData['expires']; $userData['account_expires'] = $userData['expires'];
//$userData['account_email'] = $userData['email'];
if($userData['email'] != "") if($userData['email'] != "")
{ {
@ -31,8 +30,11 @@
{ {
return false; return false;
} }
$GLOBALS['egw']->accounts->set_memberships($userData['account_groups'],$userData['account_id']);
$apps =& CreateObject('phpgwapi.applications',$userData['account_id']); $apps =& CreateObject('phpgwapi.applications',$userData['account_id']);
$apps->read_installed_apps(); $apps->read_installed_apps();
/* dont think this is still used -- RalfBecker 2006-06-03
// Read Group Apps // Read Group Apps
if ($userData['account_groups']) if ($userData['account_groups'])
{ {
@ -52,7 +54,7 @@
} }
} }
} }
*/
$apps->account_type = 'u'; $apps->account_type = 'u';
$apps->account_id = $userData['account_id']; $apps->account_id = $userData['account_id'];
$apps->data = Array(Array()); $apps->data = Array(Array());
@ -65,10 +67,12 @@
if ($turned_on) if ($turned_on)
{ {
$apps->add($app); $apps->add($app);
/* dont think this is still used -- RalfBecker 2006-06-03
if (!$apps_after[$app]) if (!$apps_after[$app])
{ {
$apps_after[] = $app; $apps_after[] = $app;
} }
*/
} }
} }
} }
@ -78,18 +82,9 @@
{ {
$GLOBALS['egw']->acl->add_repository('preferences','changepassword',$userData['account_id'],1); $GLOBALS['egw']->acl->add_repository('preferences','changepassword',$userData['account_id'],1);
} }
// Assign user to groups
if ($userData['account_groups'])
{
$c_acct_groups = count($userData['account_groups']);
for ($i=0;$i<$c_acct_groups;$i++)
{
$GLOBALS['egw']->acl->add_repository('phpgw_group',$userData['account_groups'][$i],$userData['account_id'],1);
}
}
$apps->account_apps = array(array()); $apps->account_apps = array(array());
$apps_after = array(array()); // $apps_after = array(array());
return $userData['account_id']; return $userData['account_id'];
} }

View File

@ -498,9 +498,7 @@
$p->set_var('message_display',lang('Are you sure you want to delete this group ?')); $p->set_var('message_display',lang('Are you sure you want to delete this group ?'));
$p->parse('messages','message_row'); $p->parse('messages','message_row');
$old_group_list = $GLOBALS['egw']->acl->get_ids_for_location((int)$_GET['account_id'],1,'phpgw_group'); if(($old_group_list = $GLOBALS['egw']->accounts->memberships((int)$_GET['account_id'],true)))
if($old_group_list)
{ {
$group_name = $GLOBALS['egw']->accounts->id2name($_GET['account_id']); $group_name = $GLOBALS['egw']->accounts->id2name($_GET['account_id']);
@ -640,7 +638,7 @@
$group_info = Array( $group_info = Array(
'account_id' => (int)$_GET['account_id'], 'account_id' => (int)$_GET['account_id'],
'account_name' => $GLOBALS['egw']->accounts->id2name($_GET['account_id']), 'account_name' => $GLOBALS['egw']->accounts->id2name($_GET['account_id']),
'account_user' => $this->bo->load_group_users($_GET['account_id']), 'account_user' => $GLOBALS['egw']->accounts->members($_GET['account_id']),
'account_apps' => $this->bo->load_group_apps($_GET['account_id']) 'account_apps' => $this->bo->load_group_apps($_GET['account_id'])
); );
@ -1068,8 +1066,8 @@
{ {
$userData = Array(); $userData = Array();
$userData=$_userData; $userData=$_userData;
$userData['firstname'] = $userData['account_firstname']; // $userData['firstname'] = $userData['account_firstname'];
$userData['lastname'] = $userData['account_lastname']; // $userData['lastname'] = $userData['account_lastname'];
@reset($userData['account_groups']); @reset($userData['account_groups']);
while (list($key, $value) = @each($userData['account_groups'])) while (list($key, $value) = @each($userData['account_groups']))
{ {