public function testGetAssociationsByRole() { $assoc = AccessControlAssociation::getNewInstance($this->userGroup, $this->role); $assoc->save(); $associations = AccessControlAssociation::getRecordSetByRole($this->role, new ARSelectFilter()); $this->assertEqual($associations->getTotalRecordCount(), 1); $this->assertSame($associations->get(0)->userGroup->get(), $this->userGroup); }
public function testGetRolesRecordSet() { $role = Role::getNewInstance('__testrole__'); $role->save(); $userGroup = UserGroup::getNewInstance('Any random group name'); $userGroup->save(); $assoc = AccessControlAssociation::getNewInstance($userGroup, $role); $assoc->save(); $rolesRecordSet = $userGroup->getRolesRecordSet(); $this->assertEqual($rolesRecordSet->getTotalRecordCount(), 1); $this->assertSame($rolesRecordSet->get(0), $role); }
private function updateRoles() { @unlink($this->getRoleCacheFile()); if (count($this->canceledRoles) > 0) { // Delete canceled associations $deleteFilter = new ARDeleteFilter(); $condition = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "userGroupID"), $this->getID()); $roleConditions = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), reset($this->canceledRoles)->getID()); foreach ($this->canceledRoles as $key => $role) { if ($role->isExistingRecord()) { $roleConditions->addOR(new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), $role->getID())); } else { unset($this->canceledRoles[$key]); } } $condition->addAND($roleConditions); $deleteFilter->setCondition($condition); if (!empty($this->canceledRoles)) { AccessControlAssociation::deleteRecordSet('AccessControlAssociation', $deleteFilter); } } if (count($this->appliedRoles) > 0 && is_object(reset($this->appliedRoles))) { // adding new associations is a bit trickier // First, find all nodes that are already in DB // There is no point to apply them $appliedRolesFilter = new ARSelectFilter(); $appliedIDs = array(); $condition = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "userGroupID"), $this->getID()); $roleConditions = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), reset($this->appliedRoles)->getID()); foreach ($this->appliedRoles as $key => $role) { if (is_object($role) && $role->isExistingRecord()) { $roleConditions->addOR(new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), $role->getID())); } else { unset($this->appliedRoles[$key]); } } $condition->addAND($roleConditions); $appliedRolesFilter->setCondition($condition); // Unset already applied nodes foreach (AccessControlAssociation::getRecordSetByUserGroup($this, $appliedRolesFilter, self::LOAD_REFERENCES) as $assoc) { unset($this->appliedRoles[$assoc->role->get()->getID()]); } // Apply roles foreach ($this->appliedRoles as $role) { $assoc = AccessControlAssociation::getNewInstance($this, $role); $assoc->save(); } } }