0

やあみんな、私はZendから始めて、それがどのように機能するか(そこに到達する)を理解しようとしています。Aclクラスでは、人々はすべての役割とリソースを1つのファイルで宣言しているようです。個人が基本ユーザーとしてのみログインしている場合、またはサイトへのゲスト/訪問者としてログインしている場合でも、これはシステムリソースの無駄に思えます。そのため、現在のユーザーのロール/リソースに応じてロールを設定するさまざまなクラスを作成できるかどうかを考えていました。

私の現在のアイデアは、ブートストラップのロールでswitch / caseを使用し、ロール名に基づいて個々のAclクラスをロードすることです(たとえば、'visitor' =>'Model_VisitorAcl'、'users'=>'Model_UserAcl'および ' admin'=>' Model_AdminAcl')、それぞれに対応するクラスファイルがあります。次に、クラスファイル内でそれぞれに対して何かを行います。これは機能しており、現在、すべての「admin」ACLを1つに定義して(admin-user-visitorの権限階層をバックトラック)、「user」に「user」-「visitor」の役割とリソースを設定できます。

ただし、これは最善の方法ではないようです。「user」のロール権限を変更したい場合は、「user」と「admin」のロール権限を変更する必要があります。これは2つの役割では明らかに問題ではありませんが、より大きなシステムでは明らかに問題です。

だから私は次のようなものを試しました

クラスModel_AdminAclはZend_Acl{を拡張します
  関数__construct(){
    $ d = new Model_UserAcl();

    //ロールからの継承を使用して、管理者のロールと権限を定義します
    //Model_UserAclに設定
  }
}

Model_UserAcl構成関数を実行して、ロール'user'を設定しようとすると、これは機能しないようですが、「Uncaught exception'Zend_Acl_Role_Registry_Exception' with message'Parent Role id' users'doesnotexist'」エラーがスローされます。

では、次のステップは何ですか?モジュールごとに個別のインクルードファイルがあり、必要なクラスに必要に応じてインクルードファイルがありますか?

それとも、この問題でモグラの丘から山を作っているだけですか?

ありがとう、サイ

4

1 に答える 1

0

わかりました、これを解決しました。そもそもなぜこれを試そうと思わなかったのかわかりません (金曜日の脳の混乱だと思います)

コンストラクターの内容を独自の関数に入れ、コンストラクターでその関数を呼び出し、クラスがその下のクラスから継承されるようにしました。

//Model/VisitorAcl.php
class Model_VisitorAcl extends Zend_Acl{
  関数 __construct(){
    $this->addVisitorRules();
  }

  関数 addVisitorRules(){
    //役割と権限を追加する
  }
}

//Model/UserAcl.php
class Model_UserAcl extends Model_VisitorAcl{
  関数 __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
  }

  関数 addUserRules(){
    //役割と権限を追加する
  }
}

//Model/AdminAcl.php
class Model_AdminAcl extends Model_AdminAcl{
  関数 __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
    $this->addAdminRules();
  }

  関数 addAdminRules(){
    //役割と権限を追加する
  }
}

これが私の進むべき道ではない場合は、ぜひ私に知らせてください。

サイ

于 2010-01-11T09:00:24.790 に答える