【问题标题】:How to separate admin and user in codeigniter?如何在codeigniter中分离管理员和用户?
【发布时间】:2017-02-14 09:58:28
【问题描述】:

我有两个页面供管理员和用户使用。当管理员登录时,它将重定向到http://localhost/ci3/admin/Adminhomepage,当用户登录时,它将重定向到http://localhost/ci3/user/Userhomepage。以用户身份登录后,如果我像这样http://localhost/ci3/admin/Adminhomepage 更改网址,它将直接转到管理主页。我希望它会转到管理员登录页面http://localhost/ci3/admin/Adminlogin。我有用户 ID 和管理员权限,如查看、编辑、添加和删除角色。在此任何人都设置为1,然后他是管理员,否则他是用户。我想在 Admin_controller 中编写该逻辑。

Admin_controller

<?php
class Admin_controller extends CI_Controller{
    function __construct()
    {
        parent::__construct();
        $this->load->model("Adminmodel","",true);   
        
        $userId =  $this->session->userdata('cp_adminid');
        
        $toCheck = $this->Adminmodel->tocheckadmin($userId);            
    }
}
?>

Admin_model

public function tocheckadmin($userId){
        $sql = "SELECT * FROM users u
            INNER JOIN roles r
            ON r.roleId = u.roleId
            INNER JOIN permissions p
            ON p.roleId = r.roleId
            INNER JOIN module m
            ON m.moduleId = p.moduleId
            WHERE userId= $userId
            AND (p.view == 1 or p.add == 1 or p.edit == 1 or p.deleteRole == 1)";
}

【问题讨论】:

  • 如果你得到记录那么它的管理员其他用户。然后在控制器中检查您是否从数据库中获得任何记录。在此基础上加载视图。

标签: php codeigniter-3


【解决方案1】:

因此,在主 index.php 文件中更改应用程序路径,即更改此:

$application_folder = 'application';

收件人:

`$application_folder = 'application/frontend';`

为管理应用程序创建一个目录,假设是后端,将 index.php 文件的副本放在那里并使其指向管理应用程序,所以:

$application_folder = 'application/admin';

要完成操作,请将 .htaccess 文件的副本放在后端目录中,并将其更改为使用此目录作为重写的基础:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /backend/index.php/$1 [L]

【讨论】:

    【解决方案2】:

    我通过在用户登录时在会话变量中设置用户权限来解决这个问题。

    $data = ['is_admin'     => true];
    $this->session->set_userdata($data);
    

    然后在管理区域的控制器中检查__constructor() 方法

        /**
         * login protect
         */
        public function __construct()
        {
            if (!$this->session->userdata('is_admin')) {
                redirect('admin/account/login');
            }
        }
    

    这是您使用 cmets 的示例的更新代码

    /**
     * tocheckadmin
     */
    public function tocheckadmin($admin_id)
    {
        // get the admin
        $sql = "SELECT * FROM users u
                INNER JOIN roles r
                ON r.roleId = u.roleId
                INNER JOIN permissions p
                ON p.roleId = r.roleId
                INNER JOIN module m
                ON m.moduleId = p.moduleId
                WHERE userId= $userId
                AND (p.view == 1 or p.add == 1 or p.edit == 1 or p.deleteRole == 1)";
        $query = $this->db->query($sql);
        return $query->row(); // use row() to return a single object
    }
    
    /**
     *
     */
    class Admin_controller extends CI_Controller
    {
        public function __construct()
        {
            parent::__construct();
            $this->load->model("Adminmodel","",true);
    
            $userId =  $this->session->userdata('cp_adminid');
    
            $toCheck = $this->Adminmodel->tocheckadmin($userId);
    
            if ($toCheck === false) {
    
                // then the user is not an admin
                // redirect to the admin login
    
            }
        }
    }
    

    【讨论】:

    • 我以用户身份登录,但如果我更改 url http://localhost/ci3/admin/Adminhomepage 它将转到管理页面。我有 userId 和权限,如 view=0、add=0、edit=1 和 deleteRole=0。上面的代码不起作用。
    • 您有admin = 1 权限吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2017-12-31
    • 2017-02-15
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多