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

NetBeans收银系统权限控制求助:仅管理员可访问Inventario模块

问题分析与解决方案

一、现有问题根源

1. getTipoUsuario()返回null的原因

  • 登录流程中未将当前用户的tipoUsuario字段正确存入usu对象,比如验证通过后只赋值了id_usuario,遗漏了用户类型;或者usu是新创建的空实例,而非登录时获取的完整用户对象。
  • 直接调用tUsuario.equals("admin")存在空指针风险,应优先用常量比较,即"admin".equals(tUsuario)。

2. 始终返回第一个用户类型的原因

  • ListarUsuario.get(tID)是把用户ID当作列表索引使用,但列表索引从0开始递增,而数据库中id_usuario通常是从1开始的自增ID,二者不匹配。比如用户ID为1时,会取到列表索引1的元素(实际是第二个用户),若ID大于列表长度还会触发数组越界异常。

二、可行的权限判断方案

最优方案:全局存储登录用户信息

登录验证通过时,将完整的用户对象存入全局可访问的变量(比如主窗体的成员变量),后续直接用该对象做权限判断:

1. 登录环节完善

// 登录验证逻辑(结合你的DAO实现)
String username = txtUsuario.getText();
String password = txtContrasena.getText();
Login currentUser = loginDAO.validarCredenciales(username, password); // 此方法需返回包含tipoUsuario的完整用户对象

if (currentUser != null) {
    // 将用户对象存入全局变量(比如MainFrame的成员变量)
    this.loggedUser = currentUser;
    // 跳转主界面
    new MainFrame(loggedUser).setVisible(true);
    this.dispose();
} else {
    JOptionPane.showMessageDialog(this, "用户名或密码错误");
}

2. 库存按钮的权限判断

// 在MainFrame的库存按钮点击事件中
if (loggedUser != null && "admin".equals(loggedUser.getTipoUsuario())) {
    LimpiarTable();
    ListarArticulo();
    jTabbedPane1.setSelectedIndex(1);
} else {
    JOptionPane.showMessageDialog(this, "仅管理员可访问库存模块");
}

备选方案:数据库查询匹配(不推荐)

若无法全局存储用户对象,需通过用户ID遍历列表匹配,而非用ID当索引:

List<Login> usuarioList = usuarios.ListarUsuarios();
String userRole = null;
int targetUserId = usu.getId_usuario();

// 遍历列表找到对应ID的用户
for (Login user : usuarioList) {
    if (user.getId_usuario() == targetUserId) {
        userRole = user.getTipoUsuario();
        break;
    }
}

if ("admin".equals(userRole)) {
    LimpiarTable();
    ListarArticulo();
    jTabbedPane1.setSelectedIndex(1);
} else {
    JOptionPane.showMessageDialog(this, "无访问权限");
}

三、额外优化建议

  • 定义用户类型常量,比如public static final String ROLE_ADMIN = "admin";,避免硬编码字符串,减少拼写错误。
  • 登录后直接控制界面元素:销售员登录时,将库存按钮设置为btnInventario.setEnabled(false),从根源避免无权限点击。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:38:30