Search code examples
zend-frameworkassertzend-acl

Display error message after using isAllowed


For example I have this implementation of the assert method in the class derived from Zend_Acl_Assert_Interface.

function assert(
    Zend_Acl $acl,
    Zend_Acl_Role_Interface $user = null,
    Zend_Acl_Resource_Interface $item = null,
    $privilege = null
) {
    if (!$user instanceof User) throw new Exception("…");
    if (!$item instanceof Item) throw new Exception("…");

    return
        $user->money >= $item->price &&
        $user->rating >= $item->requiredRating;
}

It checks two conditions: user has enought money and user has enought rating. How to display error message to make user know which condition is failed when isAllowed method returns only bool?


Solution

  • simply check them one by one

    $error = array();
    if(!($user->money >= $item->price))
    $error[] = "user money is less then price";
    
    if(!($user->rating >= $item->requiredRating))
    $error[] = "user rating less then required rating ";
    
    Zend_Registery::set('acl_error',$error);
    if(count($error) == 2) return false;
    
    return true;
    

    you can retrieve acl errors anywhere in your applicating by Zend_Registry::get('acl_error') ; and show it to user as you like.