2012-02-09 11 views
0

私のアプリケーションには、ユーザーと書籍があります。ユーザーは自分の本を作成、編集、削除することができます。ユーザーがログインするときは、最初にどの書籍をどの書籍で使用するかを選択する必要があります。そのブックIDはセッション変数に格納されているので、アプリケーションを通じて、ユーザーがどのブックを操作しているかがわかります。ユーザーは互いに本を共有することもでき、所有者(本を作成した人)は本の寄稿を依頼された他のユーザーよりも多くの権限を持ちます。DBレコードのチェックでZend_AuthまたはZend_Acl?

最初に私は非常に混沌とした方法でそれを実現し、今、私はこのようにそれを行うには考えていた:

  • ブートストラップでは、コントローラプラグイン認証がロードされます。ユーザがコントローラの初期化ではアイデンティティ
  • を持っている場合、私は(チェックコントローラプラグインで
  • )私はZend_Aclではをロードし、ユーザーが作業するpriviligesを持っているかどうかを確認アクションヘルパーでは私のアクションヘルパー
  • をロードこの特定の本(このユーザーと本の間のリンクが存在するかどうかを確認してください)、また書籍でこれらの操作を行う権限を持っている場合(おそらく、削除できないはずです)

これは意味がありますか?私は本のIDを保管すべきですか? Zend_Auth :: getInstance() - > getStorage()?

編集: ユーザーの役割はどこに保存されますか?また、Zend_Authのストレージですか?

答えて

1

あなたのアプローチが理にかなっていると思います。私は書籍IDをZend_Session_Namespaceに保存し、そのユーザーをZend_Authのストレージに保管します。ストレージに入れているユーザーがオブジェクト/モデルの場合は、Zend_Acl_Role_Interfaceを実装して、ユーザーの役割を返すメソッドgetRoleId()を含むようにしてください。このようにして、ユーザオブジェクトをロールが必要なACLメソッドに直接渡すことができ、オブジェクトからロールを取得できます。

それは理にかなっている場合は、ユーザーactiveBookIdと呼ばれるオブジェクトまたはそのような何かの性質を持っている可能性があり、それがユーザーオブジェクトに収まることができるようにそれはそうならばそこブックIDを格納します。

+0

ありがとうございます!残念なことに私のモデルはすべてオブジェクトの代わりに連想配列(プロジェクトの開始時にデザインの意思決定が悪い)なので、Zend_Acl_Role_Interfaceを実装することはできません。しかし、私はその本をZend_Session_Namespaceに保存します:) – Thomas

関連する問題