ZF Zend Form Validator, чтобы проверить, разрешено ли пользователю изменять поле? - PullRequest
2 голосов
/ 13 июля 2011

возможно ли написать валидатор для Zend-формы, который проверяет, имеет ли пользователь право изменять поле формы?Значит, пользователь видит поле, но если попытается даже без разрешения (без права acl), он получит сообщение об ошибке?последующее это означает, что поле деактивируется, если пользователю не разрешено изменять поле.

1 Ответ

1 голос
/ 15 июля 2011

Вы захотите использовать Zend_Acl для проверки разрешений.Вы хотите что-то вроде этого:

/** Application_Validate_HasEditRights::isValid()**/
public function isValid($value, $context = array())
{
    // Set in form or element using $this->setResource()
    $resource  = $this->_resource;
    // Set in form or element using $this->setPrivilege()
    $privilege = $this->_privilege;

    if ( empty($resource) || empty($privilege) ) {
        throw new Zend_Exception("Validator requires a resource and privilege");
    }

    // Set in form or element $this->setOriginalValue()
    $original  = $this->_originalValue;
    $isEdit = false;
    // Check if original matches new value
    if ($original != $value) {
        $isEdit = true;
    }
    /** Get ACL **/
    $acl  = new Zend_Acl();
    $acl->addRole('guest');
    $acl->addRole('administrator', 'guest');

    $acl->addResource('form');
    // $acl->allow('role', 'resource', array('privilege'));
    $acl->allow('guest','form', array('limited')); // arbitrary resource and privilege names
    $acl->allow('administrator','form', array('full-access'));

    // Get the role of the logged in user; this may be different from how you store it
    $role = Zend_Auth::getInstance()->getIdentity()->role;

    // Check if the role has access to this form
    if ( $isEdit && !$acl->isAllowed($role, $resource, $privilege) ) {
        // Set Error message
        $this->_error(self::INVALID_PRIVILEGES);
        return false;
    }

    return true;
}
...