1

コントローラー関数を使用して、データベース主導の ACL 機能を実装しplugin predispatch()ました。

それはうまくいっています。しかし、エラーコントローラーで送信されるリクエストを停止しました。

たとえば、指定されたコントローラー/アクションが定義されていない場合、システムは「要求/ページが見つかりません」を表示する代わりに「アクセスが拒否されました」というメッセージを表示します。

したがって、メソッドを使用して単一のプラグインで ACL とエラー処理の両方を実装するにはどうすればよいでしょうかpredispatch()

助けてください。

4

3 に答える 3

1

コントローラー プラグインで、必要に応じてエラー コントローラーにリダイレクトします。

$request
  ->setModuleName('default')
  ->setControllerName('error')
  ->setActionName('access')
  ->setDispatched(true);

特別なページが必要な場合は、accessAction をエラー コントローラーに配置する必要があります。または、単に既存の errorAction を使用することもできます。

于 2012-10-03T13:10:48.303 に答える
1

DB でエラー コントローラの権限を設定する必要があります。

したがって、現在のユーザー (ロール ID) には、エラー コントローラーにアクセスする権限が必要です。

あなたがDBテーブルの構造であるかどうかはわかりませんが、私のやり方では(おそらく似ています):

INSERT INTO "resources" ("id","name","description") VALUES (11,'error', 'Error controller');
INSERT INTO "permissions" ("role_id", "resource_id", "is_allowed") VALUES (1, 11, 't');

最初にリソース テーブルに挿入し、次に権限テーブルに挿入します。

于 2012-10-03T13:34:07.973 に答える
0

すべてのユーザーに対して、デフォルトでエラー コントローラを ACL プラグインに追加する必要があります。

if (!$this->has('Default_Error')) {
    $this->addResource('Default_Error');
    $this->allow('guest', 'Default_Error');
}

このようにして、誰もがエラーコントローラーを見ることができます。

于 2013-12-11T08:42:27.493 に答える