permissions.js 2.92 KB
/**
 * 权限配置中心
 *
 * @description 统一管理应用中的权限类型和提示文案
 * @module config/permissions
 * @author Claude Code
 * @created 2026-02-13
 */

/**
 * 权限类型枚举
 * @description 定义应用中的各种权限类型
 * @enum {string}
 *
 * @example
 * import { PermissionType } from '@/config/permissions'
 *
 * if (needLogin) {
 *   checkPermission(PermissionType.LOGIN, callback)
 * }
 */
export const PermissionType = {
  /** 登录权限 */
  LOGIN: 'login',
  /** VIP 权限(预留) */
  VIP: 'vip',
  /** 实名认证权限(预留) */
  VERIFIED: 'verified'
}

/**
 * 权限提示文案配置
 * @description 为每种权限类型配置对应的提示文案
 *
 * @example
 * import { PermissionMessages } from '@/config/permissions'
 *
 * const message = PermissionMessages[PermissionType.LOGIN]
 * console.log(message.content) // "登录后即可查看完整内容"
 */
export const PermissionMessages = {
  /** 登录权限提示 */
  [PermissionType.LOGIN]: {
    /** 弹窗标题 */
    title: '温馨提示',
    /** 弹窗内容 */
    content: '登录后即可查看完整内容',
    /** 确认按钮文案 */
    confirmText: '去登录',
    /** 取消按钮文案 */
    cancelText: '暂不登录'
  },

  /** VIP 权限提示(预留) */
  [PermissionType.VIP]: {
    title: 'VIP 专享',
    content: '此功能仅对 VIP 用户开放',
    confirmText: '开通 VIP',
    cancelText: '取消'
  },

  /** 实名认证权限提示(预留) */
  [PermissionType.VERIFIED]: {
    title: '需要实名认证',
    content: '请先完成实名认证',
    confirmText: '去认证',
    cancelText: '取消'
  }
}

export const ActionPermissionMap = {
  view_material: {
    permission_type: PermissionType.LOGIN,
    options: {}
  }
}

/**
 * 获取权限提示配置
 * @description 根据权限类型获取对应的提示配置,支持自定义覆盖
 * @param {string} permissionType - 权限类型
 * @param {Object} customOptions - 自定义配置选项
 * @returns {Object} 合并后的权限配置
 *
 * @example
 * const config = getPermissionConfig(PermissionType.LOGIN, {
 *   content: '请先登录后查看资料详情'
 * })
 */
export function getPermissionConfig(permissionType, customOptions = {}) {
  const defaultConfig = PermissionMessages[permissionType]

  if (!defaultConfig) {
    console.warn(`[Permission] 未找到权限类型配置: ${permissionType}`)
    return {
      title: '提示',
      content: '您没有相应的权限',
      confirmText: '确定',
      cancelText: '取消'
    }
  }

  return {
    ...defaultConfig,
    ...customOptions
  }
}

export function getActionPermissionConfig(action, customOptions = {}) {
  const actionConfig = ActionPermissionMap[action] || {
    permission_type: PermissionType.LOGIN,
    options: {}
  }

  return {
    permission_type: actionConfig.permission_type,
    options: {
      ...actionConfig.options,
      ...customOptions
    }
  }
}