0

私の CI アプリケーションには、さまざまなユーザー タイプの機能を処理するためのコントローラーがいくつかあります。

  1. カリフォルニア州
  2. CD
  3. DV
  4. CSC
  5. CB

そのため、現在、誰かがログインすると、役割によって (example) : などにリダイレクトされlocalhost/CAますlocalhost/CD

彼の役割に応じてすべてをリダイレクトするようにルートを書き直す必要があります。

$route['(:any)'] = 'CA/$1'; (CA はハードコーディングしないでください)

  • ログインコントローラーを使用する場合も、ルールを削除する必要があります(一部のURLをフィルタリングすることにより)

ログイン後にルールをフックする方法を教えてもらえますか? また、正規表現を使用して、ルールを適用する URL をフィルタリングする方法は?

$route['^((?!auth/).)*$'] = '$1';

これを達成するには、他にどのような方法がありますか?.htaccess は問題外です。ルートを作成するにはデータ ロジックが必要だからです。

4

2 に答える 2

1

データベースからのルーティングに関するこの素晴らしいチュートリアルのおかげで、ユーザーがログインした後に新しいルートを追加することができました (認証コントローラーで):

class Auth extends CI_Controller {
function Auth() {
    parent::__construct();
}
function index()
{
    if ($this->ion_auth->logged_in())
    {
        $this->__checkRoles();
    }
function __checkRoles()
    {       
        $role=$this->ion_auth->get_group();
        $this->save_routes($role);

        redirect(base_url().'index');

    }
    public function save_routes($controller=null)
    {
            $output="<?php ";
                    //some uri's don't need routing
            $output.="\$route['auth']='auth';";         
            $output.="\$route['auth/(:any)']='auth/$1';";                       
            $output.="\$route['rest']='rest';";
            $output.="\$route['rest/(:any)']='rest/$1';";

                    //for the rest route trough the "user-type" controller
            $output.="\$route['(:any)']='".$controller."/$1';";

            $this->load->helper('file');
                    //write to the cache file
            write_file(APPPATH . "cache/routes.php", $output);
    }

私のroutes.phpは次のようになります:

$route['404_override'] = '';
$route['default_controller'] = "auth";

include_once(APPPATH."cache/routes.php");
于 2012-09-06T15:34:14.290 に答える
0

あなたが望むのはremappingを実装することのようです: 標準のルーティング システムは、ユーザーがログインしているかどうかに基づいてルートを変更できるようには設計されていません。

ただし、ユーザーがログインしているかどうか、およびその役割が何であるかを確認する標準の routes.php ファイルに条件ステートメントを入れることができる場合があります (これが機能するのを見たことがありません) (セッション Cookie などを見てください)。それ) そして、別のルート オプションをロードします。試したことはありませんが、うまくいくかもしれません。

于 2012-09-05T13:46:47.883 に答える