public function testCreateRoleWithPolicies()
{
$roleService = $this->repository->getRoleService();
$limitation1 = new Limitation\ContentTypeLimitation();
$limitation1->limitationValues = array('1', '3', '13');
$limitation2 = new Limitation\SectionLimitation();
$limitation2->limitationValues = array('2', '3');
$limitation3 = new Limitation\OwnerLimitation();
$limitation3->limitationValues = array('1', '2');
$limitation4 = new Limitation\UserGroupLimitation();
$limitation4->limitationValues = array('1');
$policyCreateStruct1 = $roleService->newPolicyCreateStruct('content', 'read');
$policyCreateStruct1->addLimitation($limitation1);
$policyCreateStruct1->addLimitation($limitation2);
$policyCreateStruct2 = $roleService->newPolicyCreateStruct('content', 'edit');
$policyCreateStruct2->addLimitation($limitation3);
$policyCreateStruct2->addLimitation($limitation4);
$roleCreateStruct = $roleService->newRoleCreateStruct('ultimate_permissions');
// @todo uncomment when support for multilingual names and descriptions is added EZP-24776
// $roleCreateStruct->mainLanguageCode = 'eng-GB';
// $roleCreateStruct->names = array( 'eng-GB' => 'Ultimate permissions' );
// $roleCreateStruct->descriptions = array( 'eng-GB' => 'This is a role with ultimate permissions' );
$roleCreateStruct->addPolicy($policyCreateStruct1);
$roleCreateStruct->addPolicy($policyCreateStruct2);
$createdRole = $roleService->createRole($roleCreateStruct);
self::assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\Role', $createdRole);
self::assertGreaterThan(0, $createdRole->id);
/* @todo uncomment when support for multilingual names and descriptions is added EZP-24776
self::assertEquals(
array(
'eng-GB' => $roleCreateStruct->names['eng-GB']
),
$createdRole->getNames()
);
self::assertEquals(
array(
'eng-GB' => $roleCreateStruct->descriptions['eng-GB']
),
$createdRole->getDescriptions()
);
*/
$this->assertPropertiesCorrect(array('identifier' => $roleCreateStruct->identifier), $createdRole);
self::assertCount(2, $createdRole->getPolicies());
foreach ($createdRole->getPolicies() as $policy) {
self::assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\Policy', $policy);
self::assertGreaterThan(0, $policy->id);
self::assertEquals($createdRole->id, $policy->roleId);
self::assertCount(2, $policy->getLimitations());
foreach ($policy->getLimitations() as $limitation) {
self::assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\Limitation', $limitation);
if ($policy->module == 'content' && $policy->function == 'read') {
switch ($limitation->getIdentifier()) {
case Limitation::CONTENTTYPE:
self::assertEquals($limitation1->limitationValues, $limitation->limitationValues);
break;
case Limitation::SECTION:
self::assertEquals($limitation2->limitationValues, $limitation->limitationValues);
break;
default:
self::fail('Created role contains limitations not defined with create struct');
}
} elseif ($policy->module == 'content' && $policy->function == 'edit') {
switch ($limitation->getIdentifier()) {
case Limitation::OWNER:
self::assertEquals($limitation3->limitationValues, $limitation->limitationValues);
break;
case Limitation::USERGROUP:
self::assertEquals($limitation4->limitationValues, $limitation->limitationValues);
break;
default:
self::fail('Created role contains limitations not defined with create struct');
}
} else {
self::fail('Created role contains policy not defined with create struct');
}
}
}
}