0

管理パネルがあり、特定のデータを表示するために一部のパートナーに URL を提供する必要があります。これらのパートナーのログイン情報を格納するためのテーブルがあり、認証はそれを通じて行われます。しかし、問題は、認証後、パートナーが他の各管理ページにアクセスできることです。すべての管理ページコントローラーにチェックを含めて、セッションがパートナーに設定されているかどうかを確認し、設定されている場合はログアウトできます。しかし、私はいくつかのコントローラーを持っています。これと同じことを行うための他の方法はありますか?

4

2 に答える 2

3

pǝlɐɥʞ のソリューションは確実に機能しますが、すべてのコントローラーを編集する必要があります。別のアプローチをご紹介したいと思います。CodeIgniter はフック機能を提供します (最高ではありませんが、何もないよりはましです)。フックは、CodeIgniter コアで特定のアクションが発生する前にコードを実行する機能を提供します。

あなたの目的のために、コントローラーがインスタンス化された後、メソッド呼び出しが行われる前に実行される「post_controller_constructor」フックを使用することをお勧めします。

参照については、http: //ellislab.com/codeigniter/user-guide/general/hooks.htmlを参照してください。

フックは次のようになります

$hook['post_controller_constructor'] = array(
    'class'    => 'Auth',
    'function' => 'has_permission',
    'filename' => 'Auth.php',
    'filepath' => 'hooks',
);

アップデート

CodeIgniter ($ci =& get_instance()) のインスタンスを取得することで、フックに渡すクラス内のフレームワークのすべての機能を使用できるようになります (独自の CI ライブラリを作成するのと同じように)。そのため、そこでセッションを確認し、ユーザー権限を処理できます。

更新 2

ruuter は、 get_instance()の使用を許可する pre_controller の代わりに post_controller_constructor を使用するように私の注意を喚起しました(これはpre_controllerを使用すると使用できなくなります)。post_controller_constructorを使用することの欠点は、特定の状況で問題を引き起こす可能性があるパーミッションをチェックする前に、コントローラーのコンストラクターが常に呼び出されることです。

- この情報を提供してくれた ruuter に感謝します

ハッピーコーディング:)

于 2013-05-16T08:57:08.517 に答える