You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter中实现POS系统VOID按钮的登录验证模态框

适配原生PHP验证逻辑到CodeIgniter的解决方案

1. 修正文件结构(核心问题)

CodeIgniter遵循MVC架构,view目录仅用于存放视图模板,不能放置业务逻辑文件(如你的action.php)。首先要将验证逻辑迁移到Controller中:

  • 在application/controllers/下创建或修改Order.php控制器(已有订单相关控制器可直接复用)。

2. 实现Controller中的验证方法

在Order.php中添加处理VOID权限验证的方法,示例代码如下:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Order extends CI_Controller {

    public function __construct() {
        parent::__construct();
        // 加载用户模型(用于查询用户、权限)
        $this->load->model('User_model');
        // 加载CI表单验证库(可选,用于快速校验必填字段)
        $this->load->library('form_validation');
    }

    // 处理VOID按钮的权限验证请求
    public function void_auth() {
        // 仅接受AJAX POST请求
        if (!$this->input->is_ajax_request() || $this->input->method() !== 'post') {
            $this->output->set_content_type('application/json')->set_output(json_encode([
                'status' => 'error',
                'msg' => '非法请求'
            ]));
            return;
        }

        // 校验必填字段
        $this->form_validation->set_rules('username', '用户名', 'required');
        $this->form_validation->set_rules('password', '密码', 'required');

        if ($this->form_validation->run() === FALSE) {
            $this->output->set_content_type('application/json')->set_output(json_encode([
                'status' => 'error',
                'msg' => validation_errors()
            ]));
            return;
        }

        // 获取前端提交的参数
        $username = $this->input->post('username');
        $password = $this->input->post('password');

        // 验证用户名密码
        $user = $this->User_model->get_user_by_username($username);
        if (!$user || !password_verify($password, $user->password)) {
            $this->output->set_content_type('application/json')->set_output(json_encode([
                'status' => 'error',
                'msg' => '用户名或密码错误'
            ]));
            return;
        }

        // 验证用户是否具备商品作废权限
        if (!$this->User_model->has_void_permission($user->id)) {
            $this->output->set_content_type('application/json')->set_output(json_encode([
                'status' => 'error',
                'msg' => '无商品作废权限'
            ]));
            return;
        }

        // 验证通过,返回成功响应
        $this->output->set_content_type('application/json')->set_output(json_encode([
            'status' => 'success',
            'msg' => '验证通过'
        ]));
    }
}

3. 编写User模型(处理数据查询)

在application/models/下创建User_model.php,实现用户和权限的查询逻辑:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class User_model extends CI_Model {

    // 根据用户名查询用户信息
    public function get_user_by_username($username) {
        return $this->db->get_where('users', ['username' => $username])->row();
    }

    // 验证用户是否有商品作废权限
    public function has_void_permission($user_id) {
        // 示例:假设权限表为user_permissions,关联user_id和permission字段
        $count = $this->db->where('user_id', $user_id)
                          ->where('permission', 'void_product')
                          ->count_all_results('user_permissions');
        return $count > 0;
    }
}

4. 调整前端AJAX请求地址

将原来指向application/view/order/action.php的请求地址,修改为CodeIgniter的路由地址:

// 替换原AJAX请求地址
$.post('<?php echo base_url('order/void_auth'); ?>', {
    username: $('#username').val(),
    password: $('#password').val(),
    // 若开启CSRF防护,必须携带CSRF Token
    <?php echo $this->security->get_csrf_token_name(); ?>: '<?php echo $this->security->get_csrf_hash(); ?>'
}, function(response) {
    // 保留你原有的前端响应处理逻辑
    if (response.status === 'success') {
        // 执行商品作废操作
    } else {
        alert(response.msg);
    }
}, 'json');

5. 关键注意事项

  • CSRF防护:CodeIgniter默认开启CSRF防护,AJAX请求必须携带CSRF Token,否则会被拦截。
  • 路由配置:确保application/config/routes.php中没有自定义路由覆盖order/void_auth的访问路径,默认CI会自动映射控制器名/方法名的路由。
  • 密码安全:用户密码必须用password_hash()加密存储,验证时用password_verify()比对,禁止明文存储或校验。

内容的提问来源于stack exchange,提问作者wloleo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:35:59