从单用户到多管理员:x-ui面板权限管理进阶指南

从单用户到多管理员:x-ui面板权限管理进阶指南

【免费下载链接】x-ui 支持多协议多用户的 xray 面板 【免费下载链接】x-ui 项目地址: https://gitcode.com/gh_mirrors/xu/x-ui

你是否还在为多人共用x-ui面板导致配置混乱而头疼?是否担心普通用户误操作删除关键节点?本文将带你实现x-ui面板的多角色权限控制,通过分级管理让每个管理员各司其职,彻底解决多人协作中的权限安全问题。

读完本文你将学会:

  • 配置多管理员账户并分配差异化权限
  • 限制普通管理员的操作范围(如端口/流量控制)
  • 通过数据库模型理解权限控制原理
  • 结合Web界面实现可视化权限管理

权限管理核心模型解析

x-ui的权限系统基于用户-入站规则(Inbound)的关联模型设计,核心定义位于database/model/model.go文件中。系统通过UserId字段实现权限隔离,每个入站规则都绑定到特定用户:

type Inbound struct {
    Id         int    `json:"id" gorm:"primaryKey;autoIncrement"`
    UserId     int    `json:"-"`  // 关键权限控制字段
    Up         int64  `json:"up"`
    Down       int64  `json:"down"`
    Total      int64  `json:"total"`
    // ...其他配置项
}

用户模型则存储账户认证信息,目前基础版本仅包含用户名和密码字段:

type User struct {
    Id       int    `json:"id" gorm:"primaryKey;autoIncrement"`
    Username string `json:"username"`
    Password string `json:"password"`
}

多管理员账户配置步骤

1. 数据库层面创建多用户

通过UserService的方法可以创建额外管理员账户,相关逻辑在web/service/user.go中实现:

// 创建新管理员需手动扩展此方法
func (s *UserService) CreateUser(username string, password string) error {
    db := database.GetDB()
    user := &model.User{
        Username: username,
        Password: password,
    }
    return db.Model(model.User{}).Create(user).Error
}

2. Web界面权限控制实现

在Web控制器中,需要对每个操作添加用户权限检查。以入站规则管理为例,在web/controller/inbound.go中应添加:

// 检查当前用户是否有权限操作指定入站规则
func checkInboundPermission(c *gin.Context, inboundId int) bool {
    userId := c.GetInt("userId")
    inbound, err := inboundService.GetInboundById(inboundId)
    if err != nil || inbound.UserId != userId {
        return false
    }
    return true
}

3. 角色权限矩阵配置

根据业务需求设计权限矩阵,典型配置如下表:

操作权限超级管理员普通管理员只读用户
创建入站规则
修改入站规则仅自己创建
删除入站规则仅自己创建
查看所有规则仅自己创建
系统设置修改
用户管理

可视化权限管理界面

x-ui提供了直观的Web管理界面,通过web/html/xui/inbounds.html可以查看和管理入站规则。超级管理员可以看到所有用户的规则,而普通管理员只能看到自己创建的规则:

入站规则管理界面

创建新入站规则时,系统会自动关联当前用户ID,确保权限隔离:

创建入站规则

高级权限控制扩展建议

1. 用户角色字段扩展

修改用户模型添加角色字段:

type User struct {
    Id       int    `json:"id" gorm:"primaryKey;autoIncrement"`
    Username string `json:"username"`
    Password string `json:"password"`
    Role     string `json:"role"` // admin, operator, viewer
}

2. 基于RBAC的权限控制

实现更细粒度的权限控制,可参考web/service/panel.go中的权限检查逻辑,扩展为基于角色的访问控制。

3. 操作审计日志

添加操作日志记录所有关键变更,相关实现可参考logger/logger.go,记录用户ID、操作内容和时间。

总结与注意事项

通过本文介绍的方法,你可以实现x-ui面板的多管理员权限控制。关键注意点:

  1. 所有权限控制需在后端实现,前端仅做展示控制
  2. 定期备份用户数据,防止误操作导致权限混乱
  3. 复杂场景建议扩展用户角色模型,避免直接修改核心代码

希望本文能帮助你构建更安全、可控的x-ui管理环境。如有疑问,欢迎查阅项目README.md或提交issue反馈。

下期预告:x-ui流量监控与告警系统搭建,敬请关注!

【免费下载链接】x-ui 支持多协议多用户的 xray 面板 【免费下载链接】x-ui 项目地址: https://gitcode.com/gh_mirrors/xu/x-ui

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值