0

現在、CakePHP アプリで Auth & ACL コンポーネントをセットアップしています。リクエスタとして機能するように、モデルとモデルの両方をセットアップしていますGroupUserこれは最初はすべてaros正常に機能し、新しいグループが追加されるたびにテーブルが適切に更新されました。たとえば、これはarosテーブルの内容です。

+----+-----------+-------+-------------+-------+------+------+
| id | parent_id | model | foreign_key | alias | lft  | rght |
+----+-----------+-------+-------------+-------+------+------+
|  1 |      NULL | Group |           1 | NULL  |    1 |    2 |
|  2 |      NULL | Group |           2 | NULL  |    3 |    4 |
|  3 |      NULL | Group |           3 | NULL  |    5 |    6 |
+----+-----------+-------+-------------+-------+------+------+

それ以来、モデルUserGroupモデルを「Survey」と呼ばれる独自のプラグインにリファクタリングしました(他のモデル、コントローラー、コンポーネントなどとともに)。

私はすぐにこのエラーを受け取りました:

AclNode::node() - Couldn't find Aro node identified by "Array ( [Aro0.model] => Group [Aro0.foreign_key] => 1 ) "

User::bindNode()モデルに「Survey」プレフィックスを含めるようにメソッドを更新しました。

class User extends SurveyAppModel
{
    // ...

    public function bindNode($user)
    {
        return array('model' => 'Survey.Group', 'foreign_key' => $user['Survey.User']['group_id']);
    }

    //...
}

arosまた、テーブルの「モデル」フィールドを「グループ」ではなく「調査.グループ」に変更しました。

これによりエラーが解消され、承認と認証が再び機能するようになりました。新しいレコードを Group モデルに保存すると、テーブルのモデル フィールドがaros「Survey.Group」ではなく「Group」に設定されているため、以前と同じエラーが発生します。

新しいレコードを Group モデルに保存すると、プラグインのプレフィックス名が「モデル」フィールドに自動的に追加されるようにするにはどうすればよいのでしょうか?

4

1 に答える 1

0

$nameGroup モデルのプロパティを設定し、プラグイン名をプレフィックスとして付けることで、これを修正しました。$useTableという名前のテーブルを検索しないかのように、プロパティを設定する必要もありますmy_plugin.my_model

たとえば、これは「Survey」プラグインの一部であるグループ モデルで設定したものです。

class Group extends SurveyAppModel
{
    // ...

    public $name = 'Survey.Group';

    public $useTable = 'groups';

    // ...
}

メソッドを調べてこれを発見しました。そこでは、レコードをテーブルAclBehavior::afterSave()に保存し、モデル フィールドのプロパティを使用します。aros$model->name

于 2013-06-20T08:48:32.647 に答える