1

Zend Framework アプリケーションの動的要素に基づいて、ユーザーに個別のアクセス許可を割り当てることは可能ですか?

私は次のようなテーブルを持っています:

clients (id, name, contact_name, contact_number, logo, active)
modules (id, client_id, module_id, active)
permissions (id, user_id, client_id, module_id)
users (id, username, password, email, realname)

私がする必要があるのは、特定のユーザーが個々のクライアントごとに特定のモジュールにアクセスできるようにすることですが、Zend_ACL でこれを行う方法がわかりません。そうするための最も効率的な方法は何ですか?

編集:申し訳ありませんが、詳細を追加するのを忘れていました。管理者が管理インターフェイスでユーザーにアクセス許可を付与および取り消すことができるようにする必要があります。

4

3 に答える 3

2

この投稿を見てください。あなたが望むもののいくつかが含まれていると思います。参考までに、これはシリーズの第 3 部ですが、あなたが求めていることにもっと関連しています。

http://codeutopia.net/blog/2009/02/18/zend_acl-part-3-creating-and-storing-dynamic-acls/

于 2011-02-02T23:15:15.997 に答える
1

このトピックに戻りましょう。それを終わらせるのは良いことですが、実装はかなり難しいです。私たちが抱えている問題を理解してみましょう: ベン: あなたのプロジェクトで何が起こっているのかわかりませんが、同様のシナリオを作成しましょう. ゲスト、クライアント、管理者向けの Web サイトがあります: データベースにテーブルが必要です.ロール名を保存し、ロールごとにその権限を持っています

Roles (idRole, nameRole)
Permissions (We will speak about it later)

後で、アプリケーションにさらに多くの役割を設定する必要があるとしましょう。そのため、管理者が各役割 (Drupal や Joomla など) にアクセス許可を割り当てるページを設定します。解決策の 1 つは、すべてのモジュールを見つけることです。次に、各モジュールのコントローラーと各コントローラーのアクションを取得します。次に、Zend_Acl に、データベースの Roles テーブルからロールを設定するように指示する必要があります。リソースは、各コントローラーの Zend Modules->Actions です。したがって、すべてのモジュールを格納するテーブルが必要であり、各モジュールにはコントローラーとアクションが必要です。

Modules (idModule, nameModule)
Controllers (idController, nameController, idModule_FK)
Actions (idAction, nameAction, descriptionAction, idController_FK)

説明フィールドは、アクションの説明の例から取得します

/**
* @description := Action to edit Roles
**/
public function editAction {}

それでは、データベース構造を完成させましょう

Roles (idRole, nameRole)
Permission (idRole, allowedPermission, idAction, dateTimeAssigned)
Modules (idModule, nameModule)
Controllers (idController, nameController, idModule_FK)
Actions (idAction, nameAction, descriptionAction, idController_FK)

これは、今まで見つけた一般的な構造です。すべてのモジュール/コントローラー/アクションを取得しようとしています。それが完了したら、ここ (プラグイン クラス) に戻してから、すべてを移動しようとします。 Zend_Acl Dynamic でこの問題を処理するために一緒に (他の人への貢献)。

次のステップ: プラグインを作成するにはLibrary/App/Action/Helper、それが誰かによって行われた場合は、それについての一般的な貢献を投稿してください。次に、Zend プロジェクトで Doctrine ORM を使用してデータを保存することに焦点を当てます。3 番目のステップは、コントローラーを作成することです。データベース情報 (ロール、パーミッション、アクション) から動的に Zend_Acl を作成します。

アドバイス/アイデア/提案、ここで終了するまで続行する必要があります。

敬具、

于 2011-02-02T12:53:10.387 に答える
0

ACL の背後にある基本的なフレームワークは、たとえば次のようになります。

$acl = new Zend_Acl();

// allow user with ID 1 access reports section for client with ID 4
$acl->allow(
  new Zend_Acl_Role('user_1'),
  new Zend_Acl_Resource('reports'),
  'client_4'
);

// allow administrator access reports module for all clients
$acl->allow(
  new Zend_Acl_Role('administrator'),
  'reports'
);

などなど...
どちらのスタイルを好むかは、ほとんどあなた次第です。Zend_Acl は非常に柔軟性があり、マニュアルをもっと多くの例とベスト プラクティスを使って書くこともできたはずですが、結局のところ、自分で理解するのはそれほど難しくありません。

于 2010-08-14T13:40:48.507 に答える