1

CakePHP の ACL は初めてです。私の管理者グループは、'controllers'ACO へのフル アクセスを使用して正しく設定されていると思います。ただし、明示的に公開されていないコントローラーまたはアクションに移動しようとすると、エラーが発生します。

Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check. Node references:
Aro: Array
(
    [User] => Array
        (
            [id] => 9
            [email] => Admin
            [group_id] => 3
            [is_active] => 1
            [created] => 2013-04-08 07:59:52
            [modified] => 2013-04-08 07:59:52
            [Group] => Array
                (
                    [id] => 3
                    [name] => Administrators
                    [user_count] => 2
                    [created] => 2013-04-08 06:34:58
                    [modified] => 2013-04-08 06:34:58
                )

        )

)

Aco: controllers/Users/index [CORE/Cake/Model/Permission.php, line 94]

私のテーブルには、エイリアスとしてのacosエントリがあります。'controllers/Users/index'このエントリには、参照するparent_idが'controllers/Users'あり、次に参照するparent_idがあります'controllers'

私の'aros_acos'テーブルには、管理者グループに完全なアクセス許可を付与しているエントリが 1 つだけあります。

上記のエラーに基づいて、少し掘り下げたところ、直接呼び出そうとすると$this->Acl->Aco->node('controllers/Users/index');、戻り値がfalse. しかし、返された値に対して同じクエリを実行する$this->Acl->Aco->node('controllers');と、正しい配列になります。

何かが明らかに正しく機能していませんが、どこが間違っているのかわかりません。私は一日中ドキュメンテーションブックとAPIを掘り下げてきましたが、見つからない理由'controllers/Users/index'は見つかりませんでした'controllers'。この時点で、キャラクターと何か関係があるように見えますが、/理由はわかりません。Aco を追加するときに同じ文字列を使用したところ、正しく保存されました。

ありがとう!

4

1 に答える 1

1

ACL プラグインをhttp://www.alaxos.net/blaxos/pages/view/plugin_acl_2.0にインストールして問題を発見しました 。

この優れたユーティリティを実行した後、エイリアスにフィル パスを使用して ACO を間違って追加していることに気付きました。エイリアスは単なるアクションまたはコントローラー名であり、parent_id に基づいて正しいパスを見つけます。

これは CakePHP のドキュメントでは十分に文書化されていませんが、他に新しい点があります。

例:

'controllers/Users/index'の代わりに追加していました'index'

これが他の誰かがこの問題を解決するのに役立つことを願っています! 私はそれに丸一日を無駄にしました。

于 2013-04-09T19:17:51.767 に答える