BUGFIX Nested Group records should be removed, along with the parent.

This commit is contained in:
Sean Harvey 2012-03-26 22:05:38 +13:00
parent 86b805d03c
commit bd95bcaf61
3 changed files with 28 additions and 17 deletions

View File

@ -337,17 +337,21 @@ class Group extends DataObject {
if(!$this->Code) $this->setCode($this->Title); if(!$this->Code) $this->setCode($this->Title);
} }
} }
function onAfterDelete() { function onBeforeDelete() {
parent::onAfterDelete(); parent::onBeforeDelete();
// if deleting this group, delete it's children as well
foreach($this->Groups() as $group) {
$group->delete();
}
// Delete associated permissions // Delete associated permissions
$permissions = $this->Permissions(); foreach($this->Permissions() as $permission) {
foreach ( $permissions as $permission ) {
$permission->delete(); $permission->delete();
} }
} }
/** /**
* Checks for permission-code CMS_ACCESS_SecurityAdmin. * Checks for permission-code CMS_ACCESS_SecurityAdmin.
* If the group has ADMIN permissions, it requires the user to have ADMIN permissions as well. * If the group has ADMIN permissions, it requires the user to have ADMIN permissions as well.

View File

@ -94,15 +94,6 @@ class GroupTest extends FunctionalTest {
} }
function testDelete() {
$adminGroup = $this->objFromFixture('Group', 'admingroup');
$adminGroup->delete();
$this->assertEquals(0, DataObject::get('Group', "\"ID\"={$adminGroup->ID}")->count(), 'Group is removed');
$this->assertEquals(0, DataObject::get('Permission',"\"GroupID\"={$adminGroup->ID}")->count(), 'Permissions removed along with the group');
}
function testCollateAncestorIDs() { function testCollateAncestorIDs() {
$parentGroup = $this->objFromFixture('Group', 'parentgroup'); $parentGroup = $this->objFromFixture('Group', 'parentgroup');
$childGroup = $this->objFromFixture('Group', 'childgroup'); $childGroup = $this->objFromFixture('Group', 'childgroup');
@ -128,6 +119,19 @@ class GroupTest extends FunctionalTest {
'Orphaned nodes dont contain invalid parent IDs' 'Orphaned nodes dont contain invalid parent IDs'
); );
} }
public function testDelete() {
$group = $this->objFromFixture('Group', 'parentgroup');
$groupID = $group->ID;
$childGroupID = $this->idFromFixture('Group', 'childgroup');
$group->delete();
$this->assertEquals(0, DataObject::get('Group', "\"ID\" = {$groupID}")->Count(), 'Group is removed');
$this->assertEquals(0, DataObject::get('Permission', "\"GroupID\" = {$groupID}")->Count(), 'Permissions removed along with the group');
$this->assertEquals(0, DataObject::get('Group', "\"ParentID\" = {$groupID}")->Count(), 'Child groups are removed');
$this->assertEquals(0, DataObject::get('Group', "\"ParentID\" = {$childGroupID}")->Count(), 'Grandchild groups are removed');
}
} }
class GroupTest_Member extends Member implements TestOnly { class GroupTest_Member extends Member implements TestOnly {

View File

@ -6,6 +6,9 @@ Group:
childgroup: childgroup:
Code: childgroup Code: childgroup
Parent: =>Group.parentgroup Parent: =>Group.parentgroup
grandchildgroup:
Code: grandchildgroup
Parent: =>Group.childgroup
group1: group1:
Title: Group 1 Title: Group 1
group2: group2:
@ -26,4 +29,4 @@ GroupTest_Member:
Permission: Permission:
admincode: admincode:
Code: ADMIN Code: ADMIN
Group: =>Group.admingroup Group: =>Group.admingroup