Zend_Acl по умолчанию запрещает каждую роль для каждого ресурса с каждой привилегией до тех пор, пока они не будут специально разрешены. В моей системе у пользователя может быть много ролей, и этим ролям предоставляются разрешения. Я просто заставляю все роли пользователей перебирать их все и проверять isAllowed () на наличие заданного ресурса и привилегии для каждой роли.
например, если текущий ресурс - foo, а привилегия - bar
public function checkAllow($roles, $resouse, $privilege)
{
foreach ($roles as $role) {
if ($acl->isAllowed($role, 'foo', 'bar') === true)
return true;
}
return false;
}
Теперь я хочу реализовать порядок сортировки для этих ролей, т.е. первая назначенная роль будет иметь больше предпочтений, чем вторая и так далее.
Возникает проблема, как я могу определить конкретный отказ в отношении некоторых ролей, таких как
$this->deny('member','foo','bar');
При повторении всех ролей, как я могу узнать, что данная роль была конкретно "отклонена"? Итак, в этот момент я могу выйти из цикла foreach и вернуть false
.