0

Auth コンポーネントと Acl コンポーネントを使用して CakePHP サイトに認証/承認の組み合わせを実装しようとしていますが、実装で奇妙なことが起こっています。適切な acos、aros、および aros_acos テーブルがあり、ある程度は機能しているようです。

私は自分の行動を次のようにマッピングしました:

$this->Auth->mapActions(array('read' => array('view'), 'update' => array('edit')));

私の acos テーブルは次のようになります。

    1. サイト
  • 1.1 ページ
  • 1.2 ユーザー
  • 1.3 グループ
  • 1.4 管理者

および aros テーブル:

    1. ユーザー
  • 1.1 エディター
  • 1.1.1 管理者
  • 1.1.1.1 管理者名
  • 1.2 レギュラーユーザー

ユーザー、編集者、および管理者はグループです。Admin_name は admins グループのメンバーである admin ユーザーであり、regular_user は users グループのメンバーです。

ここで、 aros_acos テーブルで、「ユーザー」グループに「ページ」の CRUD 権限を次のように与えると: 0 1 1 0 (これにより、読み取りと更新の権限が与えられます)、すべてが正常に機能します (少なくとも「ビュー」および「編集」アクション)。しかし、0 1 0 0 (読み取り権限のみ) を入力すると、'/' にリダイレクトされます。特に気づいたことの 1 つは、app_controller または少なくとも beforeFilter() 関数を呼び出していないことです。 app_controller.

さらに、ユーザーが crud にアクセスできない場合に $this->flash メッセージを送信して、ユーザーが「許可されていない」ことを知らせる beforeFilter() を作成しました (これを行う必要がありました)。 、 $this->Auth->authError が機能していないようです)。したがって、それを念頭に置いて、ユーザー グループの aros_acos テーブルを次のように書き換えます: 0 0 1 0 (更新のみのアクセス許可)。今回は、「表示」アクションにアクセスするとフラッシュ メッセージが表示されます (これは正しいです)。アクセス許可がないため)、「編集」アクションにアクセスしようとするとフラッシュメッセージも表示されます。

私は何かが欠けています、そして私は何がわかりません。私はこの質問を書きました。それを終える前に、自分で解決策を考え出すことを望んでいます...しかし運はありません。私はまだ何が起こっているのか分かりません。私はそれがいくつかのコントローラーのことだと思います.何かアイデアはありますか?

4

1 に答える 1

1

考え1 -> ビューページのどこかに、たまたま別のページへの requestAction がありますか? ビュー ページまたはビュー ページの要素から取得される場合があります。

考え 2 -> 完全な mapActions を構築します。これは問題ではないかもしれませんが、ここから始めることをお勧めします。

$this->Auth->mapActions(array(
'read'=>array('index','view','admin_index'),
'create'=>array('add','admin_add'),
'update'=>array('edit','admin_edit'),
'delete'=>array('delete','admin_delete')));

必要に応じて、Auth コンポーネントまでコードを追跡することを恐れないでください。リダイレクト先が見つかるまで pr() だけです。何が問題を引き起こしているのかを具体的に把握します。

セッションが正しく、プロセス中に変更されていないことを確認してください。

考え 3 -> acl テーブルを適切に「再構築」していますか? データの問題かもしれません。createAco()、createAro()、および $this->Acl->allow() 関数を使用して、データが正しく、すべてのキーが正しいことを確認することをお勧めします。(チェックするのは決して面倒ではありません)

これは、一歩一歩進み、アプリをトレースする必要がある問題の 1 つです。私は現在の安定版の CakePHP を使用していますが、問題は見つかりませんでした。

于 2009-09-09T00:41:32.890 に答える