1

私は、さまざまなユーザー グループがリソースへのさまざまなアクセス権を持つ Web アプリケーションに取り組んでいます。これまでのところ特別なことはないと思いますが、注意点があります。アプリケーションは「ドメイン」に分割されているため、クライアント組織のそれぞれが独自のコンテンツを持っています。ここでは、より単純なモデルを使用して問題を説明しています。

各ドメインには同じリソース タイプがありますが、各リソース インスタンスは 1 つのドメインにのみ接続されます。1 つのドメインの場合は次のようになります。

Resources: stories, announcements

Roles:
    guest   // read only access
    root    // unlimited access 
    editor  // like guest, but with r/w access to resource "stories"
    admin   // r/w access to both resources

Zend_Acl を使用してこれを実装するための 2 つの異なるアプローチを考え出しました。1 つ目は、ドメインごとに上記をコピーして、ドメインごとに異なる ACL を使用することです。2 つ目は、1 つの ACL のみを使用し、各ドメインに新しいロールを追加することです。

Domains: domain0, domain1, domain2

Roles:
    guest
    root
    editor-domain0
    editor-domain1
    editor-domain2
    admin-domain0
    admin-domain1
    admin-domain2

2 番目のアプローチには、ユーザーがあるドメインの管理者でありながら、別のドメインの編集者になることができるという利点があります (実際に発生する可能性があります)。ただし、ロールが静的ではないという欠点もあります。ドメインを追加または削除するたびに生成する必要があります。

これらのアプローチのいずれかが有効か、または複数のドメインを処理するためのより良い方法はありますか?

4

1 に答える 1

0

もう 1 つの解決策は、Zend_Acl をサブクラス化することです。具体的には、'allow' および 'deny' メソッドをサブクラス化します。

例えば

allow($role, $action, $resource, $domain) {
 // parent::allow($role . '-' . $domain, $action, $resource);
}

それほど単純ではありませんが、アイデアはわかります。

リソース インスタンスの意味についてはよくわかりませんが、「resource-domain」、たとえば allow('admin', 'action', 'story-domain0') をお勧めします。

于 2010-02-03T17:15:43.820 に答える