1

この「単純な ACL 制御アプリケーション」CakePHP チュートリアルに従いました: http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-managed-application/simple-acl-managed-application.html

すべて正常に動作しますが、アプリには私が気に入らない癖があります。

この例では、admin、manager、user の 3 つの役割があります。ユーザー ロールを持つアカウントでログインしています。アクセス許可のないリンクをクリックすると、現在の URL にリダイレクトされるため、本質的には何も起こっていないように見えます。アプリが応答していないように見えるので、これは好きではありません。

リファラーにリダイレクトする代わりに、ユーザーを「許可が拒否されました」ページにリダイレクトするにはどうすればよいですか? UsersController名前付きpermissionDeniedビューと対応するビューに新しいアクションを作成しました。アクション用の aco も作成し、すべてのグループがアクセスできるようにしました。

4

1 に答える 1

1

何も起こっていないように見える理由は、Acl コンポーネントがビューに生成するフラッシュ メッセージを表示しないためです (Dave がコメントで既に述べたように)。これをレイアウトまたはビューに追加する必要があります。

echo $this->Session->flash('auth');

authErrorそうすれば、ユーザーは、のプロパティで設定したメッセージを見ることができますAuthComponent

もう 1 つの方法は、次のように、AppController の beforeFilter メソッドで ACL チェックを実行し、Acl チェックが失敗した場合にユーザーをリダイレクトすることです。

/**
 * ACL Check (CakeError controller is exempt from this example,
 * so errors are always "allowed" to be shown).
 */
if (!is_null($this->Auth->User()) && $this->name != 'CakeError'
    && !$this->Acl->check(array(
        'model' => 'User',
        'foreign_key' => AuthComponent::user('id')),
        $this->name . '/' . $this->request->params['action']
)) {

    // Optionally log an ACL deny message in auth.log
    CakeLog::write('auth', 'ACL DENY: ' . AuthComponent::user('username') .
        ' tried to access ' . $this->name . '/' .
        $this->request->params['action'] . '.'
    );

    // Render the forbidden page instead of the current requested page
    echo $this->render('/Pages/forbidden');

    /**
     * Make sure we halt here, otherwise the forbidden message
     * is just shown above the content.
     */
    exit;
}

そうapp/View/Pages/forbidden.ctpすれば、ファイルがレンダリングされ、exit ステートメントによってリダイレクトが発生しなくなります。

于 2013-03-01T13:09:47.380 に答える