@shzlx/badge
v0.0.3
Published
Badge for HydroOJ
Readme
badge
以 https://github.com/cqzym1985/my-hydro-plugins 为基础,并扩充为可与 shop 外挂整合的徽章系统。
功能
- 徽章新增、编辑、删除。
- 使用者徽章管理(启用/重设显示徽章)。
- 徽章展示页。
- 与商店整合:
- 可将徽章发布到商店。
- 兑换时透过
badge_purchase自动发放徽章。 - 若使用者已拥有该徽章,会拒绝购买并回传清楚讯息。
路由
badge_show/badge/showbadge_manage/badge/managebadge_add/badge/addbadge_mybadge/badge/mybadgebadge_detail/badge/:idbadge_edit/badge/:id/editbadge_shop_publish/badge/shop-publish
Shop 整合设计
1) Runtime Bridge(非静态相对汇入)
本外挂不直接使用 ../shop 类型的静态相对路径汇入,而是透过 runtime bridge:
- 读取
(global.Hydro as any).shopBridge - 若 shop 可用:注册购买模型与管理入口
- 若 shop 不可用:降级为只保留 badge 本体功能
2) 发布徽章到商店
在 badge_shop_publish 中,会建立商店商品:
name=badge.titleobjectId=badge:{badgeId}purchaseModelId=badge_purchasedata.badgeId= 徽章 IDdescription=badge.content
shop 端会以 Markdown 渲染 description,因此徽章内容可直接在商城显示。
3) 购买处理器 badge_purchase
购买流程由 BadgePurchaseModel.purchase(...) 处理:
- 徽章不存在:回传失败讯息。
- 使用者已拥有该徽章:回传失败讯息(例如:你已拥有徽章「...」)。
- 验证通过:新增使用者徽章并回传成功。
权限
badge_manage、badge_add、badge_edit、badge_shop_publish需要管理权限(PRIV.PRIV_SET_PERM)。badge_mybadge需要PRIV.PRIV_USER_PROFILE。
注意事项
- 若要使用商店发布与兑换,请先启用
shop外挂。 - 若
shop未启用,本外挂仍可正常使用徽章基本功能。 - 建议在生产环境固定外挂载入顺序,确保
shop先于badge初始化,以便立即完成 bridge 注册。
⚠️ 徽章发布到商店时的权限限制
本外挂将徽章发布到商店时,会使用 HTML 格式渲染商品描述(内含徽章视觉预览):
- 只有具有
PRIV.PRIV_SET_PERM(徽章管理权限)的管理员可发布徽章到商店 - 系统会对徽章的所有栏位进行 HTML 逃脱和安全清理,防止 XSS 攻击
- 请确保只信任有管理权限的人士操作徽章发布功能
