resource Id
요구 고유 값한다. 전역 규칙을 할당하려면 자원에 대해 상속을 사용해야합니다. 간단하게 city
리소스를 building
리소스의 부모로 전달해야합니다. 리소스를 acl에 추가 할 때 간단합니다. 아무것도 그것을 위해 정의되지 않은 경우
$acl = new Acl();
//the original Acl resource class takes a `resourceId` as constructor parameter
$mycity1 = new Resource('mycity1');
$acl->addResource($mycity1);
$mybuiding1 = new Resource('mybulding1');
//city is the buildings parent
$acl->addResource($mybuiding1,$mycity1);
//you dont even have to create a class just define the resource as string
$acl->addResource('secure_buildings',$mycity1);
$acl->addRole('myrole1');
//roles have inheritance too
$acl->addRole('myrole2','myrole1');
//myrole1 and myrole2 has access to city and all its building
$acl->allow('myrole1','mycity1');
//myrole2 has access to city and all its building except 'secure_buildings'
$acl->deny('myrole2','secure_buildings');
자식 자원 bulding
부모 city
에서 규칙을 상속 : 여기
는 샘플입니다. 코멘트
UPDATE :
ACL 모르는 그들 고유 자원 식별자, ACL 위협 동일한 모든 자원을 가지고 만 resourceId
및 상속을 찾습니다 당신이 오랫동안 가지고있는 자원 유형에 상관하지 않는다. 당신이 규칙을 정의 할 때
당신이 아니라, 그들이 자원으로 정의하고, ACL의 스택에 추가로 그들이 한 어떤 유형의 문제가되지 않습니다 allow
및 deny
에 대한 resourceId
를 제공해야합니다.
은 당신이 $acl->inAllowed
할 때 당신은 단지 그들이 그들이 부모가 없거나하는 자원 ABD로 정의 된 경우에만 것으로, 자신의 유형에 대해 상관하지 않는다 ACL 다시 roleId
및 resourceId
필요 ...
샘플 :이
$acl = new Acl();
$acl->addResource('City'); //all the cities
$acl->addResource('myCity1', 'City'); //city1 inherits City
$acl->addResource('Building', 'City'); //all the buildings in all the cities
$acl->addResource('normal_buildings', 'Building');
$acl->addResource('secure_buildings', 'Building');
$acl->addResource('top_secure_buildings', 'secure_buildings');
$acl->addRole('Civilian');
$acl->addRole('High_Level_Security', 'Civilian');
$acl->allow('Civilian', 'City');
$acl->deny('Civilian', 'secure_buildings');
$acl->allow('High_Level_Security', 'secure_buildings');
$acl->deny('High_Level_Security', 'top_secure_buildings');
var_dump($acl->isAllowed('Civilian', 'City'));//true -> direct allow rule
var_dump($acl->isAllowed('Civilian', 'myCity1'));//true -> inherited from City allow rule
var_dump($acl->isAllowed('Civilian', 'Building'));//true -> inherited from City allow rule
var_dump($acl->isAllowed('Civilian', 'normal_buildings'));//true -> inherited from City allow rule
var_dump($acl->isAllowed('Civilian', 'secure_buildings'));//false -> direct deny rule
var_dump($acl->isAllowed('Civilian', 'top_secure_buildings'));//false -> inherited from secure_building deny rule
var_dump($acl->isAllowed('High_Level_Security', 'City'));//true -> inherited from Civilian->City allow rule
var_dump($acl->isAllowed('High_Level_Security', 'myCity1'));//true -> inherited from Civilian->City allow rule
var_dump($acl->isAllowed('High_Level_Security', 'Building'));//true -> inherited from Civilian->City allow rule
var_dump($acl->isAllowed('High_Level_Security', 'normal_buildings'));//true -> inherited from Civilian->City allow rule
var_dump($acl->isAllowed('High_Level_Security', 'secure_buildings'));//true -> direct allow rule
var_dump($acl->isAllowed('High_Level_Security', 'top_secure_buildings'));//false -> direct deny rule
은 어쩌면 도움이 될 수 있습니다 충분한 샘플을 희망 : http://stackoverflow.com/questions/11668785/zend-acl-dynamic-assertion이 예를 들어 있습니다. –