fix: 企业账号只能访问授权给本企业的资产
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m25s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m25s
/assets/:identifier/* 共用 AssetService.Resolve 解析资产,而店铺数据范围 ApplyShopFilter 对企业账号不加条件, 企业账号可以查询并操作任意卡或设备(资产详情、订单、套餐、停复机、停用、改套餐有效期与已用量、开关轮询、改实名状态)。 - Resolve 对企业账号校验卡或设备当前授权给本企业,未授权与不存在同样返回未找到 - 改套餐有效期、改已用量、停用、开关轮询、改实名状态对企业账号返回无权限;停复机按授权范围放行 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -391,6 +391,9 @@ func (h *AssetHandler) CurrentPackage(c *fiber.Ctx) error {
|
||||
// UpdatePackageExpiresAt 修改资产套餐过期时间
|
||||
// PATCH /api/admin/assets/:identifier/packages/:package_usage_id/expires-at
|
||||
func (h *AssetHandler) UpdatePackageExpiresAt(c *fiber.Ctx) error {
|
||||
if err := rejectEnterpriseAssetAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
asset, packageUsageID, err := h.resolveAssetPackageUsagePath(c)
|
||||
if err != nil {
|
||||
@@ -417,6 +420,9 @@ func (h *AssetHandler) UpdatePackageExpiresAt(c *fiber.Ctx) error {
|
||||
// UpdatePackageUsage 修改资产套餐已用量
|
||||
// PATCH /api/admin/assets/:identifier/packages/:package_usage_id/used-data
|
||||
func (h *AssetHandler) UpdatePackageUsage(c *fiber.Ctx) error {
|
||||
if err := rejectEnterpriseAssetAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
asset, packageUsageID, err := h.resolveAssetPackageUsagePath(c)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -496,6 +502,9 @@ func (h *AssetHandler) Start(c *fiber.Ctx) error {
|
||||
// Deactivate 停用资产
|
||||
// PATCH /api/admin/assets/:identifier/deactivate
|
||||
func (h *AssetHandler) Deactivate(c *fiber.Ctx) error {
|
||||
if err := rejectEnterpriseAssetAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
if h.assetLifecycleService == nil {
|
||||
return errors.New(errors.CodeInternalError, "资产生命周期服务未配置")
|
||||
}
|
||||
@@ -590,6 +599,9 @@ func (h *AssetHandler) OperationLogs(c *fiber.Ctx) error {
|
||||
// UpdatePollingStatus 更新资产轮询状态
|
||||
// PATCH /api/admin/assets/:identifier/polling-status
|
||||
func (h *AssetHandler) UpdatePollingStatus(c *fiber.Ctx) error {
|
||||
if err := rejectEnterpriseAssetAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
identifier := c.Params("identifier")
|
||||
if identifier == "" {
|
||||
return errors.New(errors.CodeInvalidParam)
|
||||
@@ -678,6 +690,9 @@ func (h *AssetHandler) UpdateRealnamePolicy(c *fiber.Ctx) error {
|
||||
// UpdateRealnameStatus 手动更新资产实名状态
|
||||
// PATCH /api/admin/assets/:identifier/realname-status
|
||||
func (h *AssetHandler) UpdateRealnameStatus(c *fiber.Ctx) error {
|
||||
if err := rejectEnterpriseAssetAdmin(c); err != nil {
|
||||
return err
|
||||
}
|
||||
identifier := c.Params("identifier")
|
||||
if identifier == "" {
|
||||
return errors.New(errors.CodeInvalidParam)
|
||||
@@ -770,3 +785,12 @@ func assetIdentifierForAudit(asset *dto.AssetResolveResponse) string {
|
||||
}
|
||||
return asset.Identifier
|
||||
}
|
||||
|
||||
// rejectEnterpriseAssetAdmin 拒绝企业账号执行平台管理类资产写操作(改套餐有效期与已用量、停用、开关轮询、改实名状态)。
|
||||
// 企业账号即使对已授权资产也不能执行这些操作;停复机仍按企业授权范围放行(由 Resolve 约束)。
|
||||
func rejectEnterpriseAssetAdmin(c *fiber.Ctx) error {
|
||||
if middleware.GetUserTypeFromContext(c.UserContext()) == constants.UserTypeEnterprise {
|
||||
return errors.New(errors.CodeForbidden, "企业账号无权执行该资产操作")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user