permission-usage-examples.md 3.11 KB

权限管理系统使用示例

本文档展示了如何在项目中使用新的权限管理系统。

基本用法

1. 在页面中检查权限

import { checkPermission, PERMISSION_TYPES } from '@/utils/permission'

// 检查卖车权限
const handleSellCar = async () => {
  const hasPermission = await checkPermission(PERMISSION_TYPES.SELL_CAR)
  if (hasPermission) {
    // 执行卖车操作
    Taro.navigateTo({ url: '/pages/sell/index' })
  }
}

// 检查购买权限
const handleBuyCar = async () => {
  const hasPermission = await checkPermission(PERMISSION_TYPES.BUY_CAR)
  if (hasPermission) {
    // 执行购买操作
    onPay({ id: carId, price: price })
  }
}

2. 使用用户状态管理

import { useUserStore } from '@/stores/user'

const userStore = useUserStore()

// 获取用户信息
await userStore.fetchUserInfo()

// 检查用户是否已认证
if (userStore.isAuthenticated) {
  // 用户已认证
}

// 检查用户资料是否完整
if (userStore.hasCompleteProfile) {
  // 用户资料完整
}

3. 批量权限检查

import { checkMultiplePermissions, PERMISSION_TYPES } from '@/utils/permission'

const permissions = await checkMultiplePermissions([
  PERMISSION_TYPES.SELL_CAR,
  PERMISSION_TYPES.ORDER_MANAGEMENT,
  PERMISSION_TYPES.MESSAGE
])

if (permissions.SELL_CAR) {
  // 有卖车权限
}

if (permissions.ORDER_MANAGEMENT) {
  // 有订单管理权限
}

4. 自定义权限检查

import { checkUserFields } from '@/utils/permission'

// 检查用户是否填写了特定字段
const hasRequiredFields = await checkUserFields(['phone', 'school', 'nickname'])
if (hasRequiredFields) {
  // 用户已填写所有必需字段
}

权限类型说明

  • BASIC_INFO: 基础信息权限(需要手机号)
  • SELL_CAR: 卖车权限(需要手机号)
  • BUY_CAR: 买车权限(需要手机号)
  • CONTACT_SELLER: 联系卖家权限(需要手机号)
  • ORDER_MANAGEMENT: 订单管理权限(需要手机号)
  • MESSAGE: 消息权限(需要手机号)
  • PROFILE: 个人资料权限(需要手机号)
  • COMPLETE_PROFILE: 完整资料权限(需要手机号、学校、昵称)

扩展权限类型

如需添加新的权限类型,请在 /src/utils/permission.js 中:

  1. PERMISSION_TYPES 中添加新类型
  2. PERMISSION_CONFIG 中配置权限要求
  3. 根据需要自定义提示信息和跳转逻辑
// 添加新权限类型
export const PERMISSION_TYPES = {
  // ... 现有类型
  NEW_FEATURE: 'NEW_FEATURE'
}

// 配置权限要求
export const PERMISSION_CONFIG = {
  // ... 现有配置
  [PERMISSION_TYPES.NEW_FEATURE]: {
    requiredFields: ['phone', 'realName'], // 需要的字段
    message: '使用此功能需要完善手机号和真实姓名',
    redirectUrl: '/pages/register/index'
  }
}

注意事项

  1. 权限检查是异步操作,请使用 await.then()
  2. 权限检查失败时会自动显示提示并跳转到注册页面
  3. 用户状态会自动缓存,避免重复请求
  4. 建议在页面加载时预先获取用户信息以提升用户体验