如何批量为Mantis项目分配/添加100+用户?
批量将用户添加至Mantis项目的低风险解决方案
方案1:使用Mantis批量分配插件
在Mantis官方插件库中找支持批量添加用户到项目的插件(比如Project User Bulk Add或同类功能插件),这类插件基于Mantis原生逻辑操作,不会破坏数据结构,是风险最低的选择。
操作步骤:
- 安装并启用对应插件
- 从用户管理页面导出已创建用户的CSV列表,整理成包含
username/user_id和目标project_id的格式 - 在插件的批量操作界面上传该CSV,确认参数后执行分配
方案2:通过Mantis REST API编写批量脚本
利用Mantis官方REST API编写简单脚本,通过官方接口完成分配,比直接操作数据库安全得多。以下是Python示例:
准备信息:
- 从项目设置页面URL获取目标
project_id(比如manage_proj_edit_page.php?project_id=5中的5) - 在个人设置中生成Mantis API令牌
- 整理已创建用户的用户名列表(可复用之前创建用户的CSV)
- 从项目设置页面URL获取目标
示例脚本:
import requests # 替换为你的Mantis实例信息 MANTIS_BASE_URL = "http://你的EC2实例IP/mantisbt/api/rest/" API_TOKEN = "你的Mantis API令牌" TARGET_PROJECT_ID = 5 # 目标项目ID USER_USERNAMES = ["user01", "user02", "user03"] # 批量用户列表 ACCESS_LEVEL = 50 # 分配权限:10=Viewer,25=Updater,40=Developer,50=Reporter,55=Manager,70=Administrator headers = { "Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json" } for username in USER_USERNAMES: # 获取用户ID user_res = requests.get(f"{MANTIS_BASE_URL}/users/username/{username}", headers=headers) if user_res.status_code != 200: print(f"跳过用户 {username}: 未找到或API请求失败") continue user_id = user_res.json()["id"] # 分配用户到项目 assign_data = { "user_id": user_id, "project_id": TARGET_PROJECT_ID, "access_level": ACCESS_LEVEL } assign_res = requests.post(f"{MANTIS_BASE_URL}/project_user", json=assign_data, headers=headers) if assign_res.status_code == 201: print(f"成功分配 {username} 到目标项目") else: print(f"分配 {username} 失败: {assign_res.text}")
执行前先拿1-2个用户测试,确认权限和参数无误后再批量运行。
方案3:安全的数据库操作(仅万不得已时使用)
如果以上方案都不可行,直接操作数据库前必须先完整备份数据库,然后用事务执行,避免数据损坏。
Mantis中用户与项目的关联表为mantis_project_user_table,核心字段:project_id(项目ID)、user_id(用户ID)、access_level(权限等级)。
操作示例:
- 备份数据库:
mysqldump -u 数据库用户名 -p 你的Mantis数据库名 > mantis_backup_$(date +%Y%m%d).sql
- 导入用户列表并批量关联:
-- 创建临时表存储待分配的用户名(假设CSV路径为/var/lib/mysql-files/users.csv,仅含username列) CREATE TEMPORARY TABLE temp_batch_users (username VARCHAR(255) NOT NULL); LOAD DATA INFILE '/var/lib/mysql-files/users.csv' INTO TABLE temp_batch_users FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; -- 开始事务,批量插入关联记录(替换PROJECT_ID和权限等级) START TRANSACTION; INSERT INTO mantis_project_user_table (project_id, user_id, access_level) SELECT 5, u.id, 50 FROM mantis_user_table u JOIN temp_batch_users tbu ON u.username = tbu.username; -- 检查插入行数是否符合预期,确认无误后提交,否则执行ROLLBACK COMMIT;
注意:确保CSV路径符合MySQL的secure_file_priv配置,且先在测试环境验证SQL逻辑。
内容的提问来源于stack exchange,提问作者samsepiol
相关产品推荐
相关产品推荐

