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);
 }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
 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();
         }
     }
 }