从单用户到多管理员:x-ui面板权限管理进阶指南
【免费下载链接】x-ui 支持多协议多用户的 xray 面板 项目地址: 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面板的多管理员权限控制。关键注意点:
- 所有权限控制需在后端实现,前端仅做展示控制
- 定期备份用户数据,防止误操作导致权限混乱
- 复杂场景建议扩展用户角色模型,避免直接修改核心代码
希望本文能帮助你构建更安全、可控的x-ui管理环境。如有疑问,欢迎查阅项目README.md或提交issue反馈。
下期预告:x-ui流量监控与告警系统搭建,敬请关注!
【免费下载链接】x-ui 支持多协议多用户的 xray 面板 项目地址: https://gitcode.com/gh_mirrors/xu/x-ui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





