package services import ( "context" "encoding/json" "go.uber.org/zap" "tyapi-server/internal/domains/admin/entities" "tyapi-server/internal/domains/admin/repositories" ) // AdminService 管理员领域服务 type AdminService struct { adminRepo repositories.AdminRepository permissionRepo repositories.AdminPermissionRepository logger *zap.Logger } // NewAdminService 创建管理员领域服务 func NewAdminService( adminRepo repositories.AdminRepository, permissionRepo repositories.AdminPermissionRepository, logger *zap.Logger, ) *AdminService { return &AdminService{ adminRepo: adminRepo, permissionRepo: permissionRepo, logger: logger, } } // GetAdminPermissions 获取管理员权限 func (s *AdminService) GetAdminPermissions(ctx context.Context, admin *entities.Admin) ([]string, error) { // 首先从角色获取权限 rolePermissions, err := s.adminRepo.GetPermissionsByRole(ctx, admin.Role) if err != nil { return nil, err } // 从角色权限中提取权限代码 permissions := make([]string, 0, len(rolePermissions)) for _, perm := range rolePermissions { permissions = append(permissions, perm.Code) } // 如果有自定义权限,也添加进去 if admin.Permissions != "" { var customPermissions []string if err := json.Unmarshal([]byte(admin.Permissions), &customPermissions); err == nil { permissions = append(permissions, customPermissions...) } } return permissions, nil }