2011-07-12 7 views
2

ユーザーがフォームフィールドを変更する権限を持っているかどうかをチェックする、zendフォームのバリデータを記述することは可能ですか?ユーザーにはフィールドが表示されますが、権限がなくても(acl権限なしでも)試行すると、エラーメッセージが表示されますか?これは、ユーザがフィールドを変更することを許可されていない場合、フィールドが非アクティブ化されることを意味します。ZF Zend Formユーザーがフィールドを変更できるかどうかを確認するフォーム検証ツールですか?

+0

はい可能です。これが起こることに問題がありますか?コードはありますか?何を試しましたか? –

+0

私は以前はZFを使用していませんでしたが、基本的にはゼロから始まっています。私はチュートリアルから作業するフォームを得ることができると思いますが、バリデーターの権利をチェックするサンプルがありますか? – Manuel

答えて

1

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; 
} 
+0

Thx bradyでも、それでも私の問題は解決しません。 – Manuel

+0

あなたはフォームから要素を完全に削除しています。これは基本的には良いアイデアですが、私の目標ではありません。ユーザーはフィールドの内容を確認する必要があり、変更しようとすると応答が必要なので、Elementを検証する必要があります。私はアプリケーションを一般的なものにしたいと思っています。設定ファイル(application.ini)またはデータベースに(フォーム)とその権利を格納することは可能ですか?どのようにフォームをデータベースに戻しても安全ですか?フォームからAJAXレスポンスを作成できますか? – Manuel

+0

バリデーターでコードを表示するように私の答えを更新しました。このコンセプトは、異なるコンテキストで使用する場合と同じです。必要に応じて、フォーム、リソース、特権、およびACL全体をデータベースまたはiniファイルに格納することができます。フォームの保存とAJAXでの使用。 [Zend_Form](http://framework.zend.com/manual/en/zend.form.html)のマニュアルをお読みになることをお勧めします。 –

関連する問題