Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

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

  • Loading branch information...
commit bd95bcaf6149b04ce4478d257098b469646f0f7d 1 parent 86b805d
@halkyon halkyon authored
View
18 security/Group.php
@@ -337,17 +337,21 @@ function onBeforeWrite() {
if(!$this->Code) $this->setCode($this->Title);
}
}
-
- function onAfterDelete() {
- parent::onAfterDelete();
-
+
+ function onBeforeDelete() {
+ parent::onBeforeDelete();
+
+ // if deleting this group, delete it's children as well
+ foreach($this->Groups() as $group) {
+ $group->delete();
+ }
+
// Delete associated permissions
- $permissions = $this->Permissions();
- foreach ( $permissions as $permission ) {
+ foreach($this->Permissions() as $permission) {
$permission->delete();
}
}
-
+
/**
* Checks for permission-code CMS_ACCESS_SecurityAdmin.
* If the group has ADMIN permissions, it requires the user to have ADMIN permissions as well.
View
22 tests/security/GroupTest.php
@@ -94,15 +94,6 @@ function testMemberGroupRelationForm() {
}
- 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() {
$parentGroup = $this->objFromFixture('Group', 'parentgroup');
$childGroup = $this->objFromFixture('Group', 'childgroup');
@@ -128,6 +119,19 @@ function testCollateAncestorIDs() {
'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 {
View
5 tests/security/GroupTest.yml
@@ -6,6 +6,9 @@ Group:
childgroup:
Code: childgroup
Parent: =>Group.parentgroup
+ grandchildgroup:
+ Code: grandchildgroup
+ Parent: =>Group.childgroup
group1:
Title: Group 1
group2:
@@ -26,4 +29,4 @@ GroupTest_Member:
Permission:
admincode:
Code: ADMIN
- Group: =>Group.admingroup
+ Group: =>Group.admingroup
Please sign in to comment.
Something went wrong with that request. Please try again.