2026-07-05 01:55:03 +08:00

69 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package host
import (
"context"
"strings"
"hyapp/pkg/xerr"
)
const (
CapabilityManagerCenter = "manager_center"
CapabilityManagerResourceGrant = "manager_resource_grant"
CapabilityManagerGrantAvatarFrame = "manager_grant_avatar_frame"
CapabilityManagerGrantVehicle = "manager_grant_vehicle"
CapabilityManagerGrantBadge = "manager_grant_badge"
CapabilityManagerGrantVIP = "manager_grant_vip"
CapabilityManagerUpdateUserLevel = "manager_update_user_level"
CapabilityManagerAddBDLeader = "manager_add_bd_leader"
CapabilityManagerAddAdmin = "manager_add_admin"
CapabilityManagerAddSuperadmin = "manager_add_superadmin"
CapabilityManagerBlockUser = "manager_block_user"
CapabilityManagerTransferCountry = "manager_transfer_user_country"
)
// CheckBusinessCapability 是 App/H5 业务入口的服务端身份边界。
// 经理中心只认 manager_profiles 中的 active 经理身份不把客户端自报角色、Agency owner 或普通 BD 当作授权依据。
func (s *Service) CheckBusinessCapability(ctx context.Context, actorUserID int64, capability string) (bool, string, error) {
if s.repository == nil {
return false, "", xerr.New(xerr.Unavailable, "host repository is not configured")
}
if actorUserID <= 0 {
return false, "", xerr.New(xerr.InvalidArgument, "actor_user_id is required")
}
capability = strings.ToLower(strings.TrimSpace(capability))
switch capability {
case CapabilityManagerCenter:
ok, err := s.repository.HasActiveManagerProfile(ctx, actorUserID)
if err != nil {
return false, "", err
}
if !ok {
return false, "active_manager_required", nil
}
return true, "", nil
case CapabilityManagerResourceGrant,
CapabilityManagerGrantAvatarFrame,
CapabilityManagerGrantVehicle,
CapabilityManagerGrantBadge,
CapabilityManagerGrantVIP,
CapabilityManagerUpdateUserLevel,
CapabilityManagerAddBDLeader,
CapabilityManagerAddAdmin,
CapabilityManagerAddSuperadmin,
CapabilityManagerBlockUser,
CapabilityManagerTransferCountry:
// 细分能力必须同时满足 active 经理身份和对应权限开关;这样 H5 被篡改后直调写接口也会被 user-service 拒绝。
ok, err := s.repository.HasActiveManagerCapability(ctx, actorUserID, capability)
if err != nil {
return false, "", err
}
if !ok {
return false, "manager_capability_required", nil
}
return true, "", nil
default:
return false, "", xerr.New(xerr.InvalidArgument, "business capability is invalid")
}
}