0

一連のアクションがある CakePHP アプリケーションにコントローラーがあります。ACL コンポーネントを使用して、コントローラーでどのユーザーがどのアクションを実行できるかを管理しています。特定のログイン ユーザーが次のような要求されたアクションの実行を許可されているかどうかを確認するために、コントローラーに isAuthorized() アクションがあります。

function isAuthorized()
{
    switch($this->action)
    {
        case 'myAction':
            $user_id = $this->Auth->user('id'); // the id of the connected user        

            if($user_id)
            {
                return $this->Acl->check(
                    array('model' => 'MyModel', 'foreign_key' => $user_id),
                    'controllers/MyController/myAction'
                );
            }

            break;
    }
}

上記のように、Acl コンポーネントmyActionのメソッドを使用して、接続しているユーザーが実行を許可されているかどうかを確認するだけです。このアプローチの問題点は、呼び出されるcheckたびにこのチェックが行われることです。myActionこのチェックを 1 回だけ実行するよう Cake に指示する方法はありますか (たとえば、アクションの最初の呼び出し時)? ユーザーがアプリケーションの速度を大幅に低下させるコントローラーアクションの実行を許可されているかどうかを毎回確認します。

どんな助けや提案も大歓迎です

ありがとうございました

4

1 に答える 1

2

技術的に言えば、HTTP はステートレスであり、各リクエストには同じユーザーからの他のリクエストとのアフィニティはありません。ステートフルネスは、セッションを使用して作成されます。

ACL チェックの結果をセッション変数に保存できます。ただし、ログイン中にユーザーのアクセスが変更された場合は、何らかの方法でリセットする必要があります。

于 2013-06-06T00:29:02.547 に答える