0

在我的 CI 应用程序中,我有一些控制器来处理不同的用户类型功能:

  1. 加州
  2. 光盘
  3. DV
  4. CSC
  5. CB

所以目前当有人登录时,他会被他的角色重定向到(示例):localhost/CAlocalhost/CD等等。

我需要重写路由以根据他的角色重定向所有内容:

$route['(:any)'] = 'CA/$1'; (CA 不应被硬编码)

  • 使用登录控制器时也应该删除该规则(通过过滤一些 url)

谁能告诉我登录后如何挂钩规则?以及如何使用正则表达式来过滤一些应用规则的 url?

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

还有什么其他方法可以实现这一目标?.htaccess 是不可能的,因为我需要一些数据逻辑来创建路由。

4

2 回答 2

1

感谢这个关于从数据库路由的精彩教程,我设法在用户登录后添加新路由(在我的 Auth 控制器中):

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

听起来您想要实现重新映射:标准路由系统并非旨在让您根据用户是否登录来更改路由。

但是,您可能(我从未见过这样的工作)能够将条件语句放在标准 routes.php 文件中,以检查用户是否已登录以及他们的角色是什么(查看会话 cookie 或类似的东西那)然后加载不同的路线选项。从未尝试过,但这可能对你有用。

于 2012-09-05T13:46:47.883 回答