BUGFIX Fixed SiteTree::can_edit_multiple() and canEdit() to collect permissions from different Versioned tables, which fixes querying a SiteTree record which has been deleted from stage for its permissions (e.g. in SiteTreeActionsTest)

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@85336 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Ingo Schommer 2009-08-27 06:53:28 +00:00
parent 1a7418c18b
commit 1193aed711

View File

@ -810,6 +810,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
// Regular canEdit logic is handled by can_edit_multiple
$results = self::can_edit_multiple(array($this->ID), $memberID);
return $results[$this->ID];
}
@ -910,12 +911,14 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
//$ids = array_keys(array_filter(self::can_view_multiple($ids, $memberID)));
// Get the groups that the given member belongs to
//Debug::message("can_edit_multiple");
$groupIDs = DataObject::get_by_id('Member', $memberID)->Groups()->column("ID");
$SQL_groupList = implode(", ", $groupIDs);
$combinedStageResult = array();
foreach(array('Stage', 'Live') as $stage) {
// Get the uninherited permissions
$uninheritedPermissions = DataObject::get("SiteTree", "(CanEditType = 'LoggedInUsers' OR
$uninheritedPermissions = Versioned::get_by_stage("SiteTree", $stage, "(CanEditType = 'LoggedInUsers' OR
(CanEditType = 'OnlyTheseUsers' AND \"SiteTree_EditorGroups\".SiteTreeID IS NOT NULL))
AND \"SiteTree\".ID IN ($SQL_idList)",
"",
@ -929,7 +932,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
}
// Get permissions that are inherited
$potentiallyInherited = DataObject::get("SiteTree", "CanEditType = 'Inherit'
$potentiallyInherited = Versioned::get_by_stage("SiteTree", $stage, "CanEditType = 'Inherit'
AND \"SiteTree\".ID IN ($SQL_idList)");
if($potentiallyInherited) {
@ -950,7 +953,10 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
}
}
return $result;
$combinedStageResult = $combinedStageResult + $result;
}
return $combinedStageResult;
/*
@ -2063,7 +2069,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
$stageVersion = Versioned::get_versionnumber_by_stage('SiteTree', 'Stage', $this->ID);
// Return true for both completely deleted pages and for pages just deleted from stage.
return !$stageVersion;
return !($stageVersion);
}
/**