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?

有帮助吗?

解决方案

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top