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