# 🔐 权限快速参考 ## 📋 按钮分类 ### 增删改类按钮(写操作) #### ✏️ 增加类 ``` 添加成员 OWNER ✅ EDITOR ✅ VIEWER ❌ 新增成员 OWNER ✅ EDITOR ✅ VIEWER ❌ 添加父亲 OWNER ✅ EDITOR ✅ VIEWER ❌ 添加母亲 OWNER ✅ EDITOR ✅ VIEWER ❌ 添加子女 OWNER ✅ EDITOR ✅ VIEWER ❌ 添加配偶 OWNER ✅ EDITOR ✅ VIEWER ❌ 创建家族树 OWNER ✅ EDITOR ✅ VIEWER ❌ 邀请协作者 OWNER ✅ EDITOR ❌ VIEWER ❌ ⚠️ 仅创建者 ``` #### 📝 修改类 ``` 编辑 OWNER ✅ EDITOR ✅ VIEWER ❌ 保存 OWNER ✅ EDITOR ✅ VIEWER ❌ 导入数据 OWNER ✅ EDITOR ✅ VIEWER ❌ 导入GEDCOM OWNER ✅ EDITOR ✅ VIEWER ❌ 修改密码 OWNER ✅ EDITOR ✅ VIEWER ✅ ⚠️ 修改自己的密码 ``` #### 🗑️ 删除类 ``` 删除成员 OWNER ✅ EDITOR ✅ VIEWER ❌ 删除家族树 OWNER ✅ EDITOR ❌ VIEWER ❌ ⚠️ 仅创建者 移除协作者 OWNER ✅ EDITOR ❌ VIEWER ❌ ⚠️ 仅创建者 清空数据 OWNER ✅ EDITOR ❌ VIEWER ❌ ⚠️ 仅创建者 清空日志 OWNER ✅ EDITOR ❌ VIEWER ❌ ⚠️ 仅创建者 ``` --- ### 查类按钮(读操作) #### 👁️ 查看类 ``` 查看详情 OWNER ✅ EDITOR ✅ VIEWER ✅ 查看全部 OWNER ✅ EDITOR ✅ VIEWER ✅ 查看族谱图 OWNER ✅ EDITOR ✅ VIEWER ✅ 查看大事记 OWNER ✅ EDITOR ✅ VIEWER ✅ 查看时间线 OWNER ✅ EDITOR ✅ VIEWER ✅ 查看迁徙记录 OWNER ✅ EDITOR ✅ VIEWER ✅ ``` #### 🔍 搜索查询类 ``` 搜索 OWNER ✅ EDITOR ✅ VIEWER ✅ 筛选 OWNER ✅ EDITOR ✅ VIEWER ✅ 关系查询 OWNER ✅ EDITOR ✅ VIEWER ✅ 计算关系 OWNER ✅ EDITOR ✅ VIEWER ✅ 在族谱图中定位 OWNER ✅ EDITOR ✅ VIEWER ✅ ``` #### 📤 导出类 ``` 导出数据 OWNER ✅ EDITOR ✅ VIEWER ✅ 导出GEDCOM OWNER ✅ EDITOR ✅ VIEWER ✅ 导出图片 OWNER ✅ EDITOR ✅ VIEWER ✅ 打印 OWNER ✅ EDITOR ✅ VIEWER ✅ ``` #### 🎛️ 视图控制类 ``` 放大 OWNER ✅ EDITOR ✅ VIEWER ✅ 缩小 OWNER ✅ EDITOR ✅ VIEWER ✅ 重置 OWNER ✅ EDITOR ✅ VIEWER ✅ 切换视图 OWNER ✅ EDITOR ✅ VIEWER ✅ ``` --- ## 🎯 角色权限总结 ### 🔴 OWNER(创建者) **可用按钮**: 80+ 个 | **权限**: 全部 **独有权限**(只有创建者可以): - ❌ 删除家族树 - ❌ 邀请协作者 - ❌ 移除协作者 - ❌ 清空数据 - ❌ 清空日志 --- ### 🟡 EDITOR(编辑者) **可用按钮**: 60+ 个 | **权限**: 编辑 **可以做**: - ✅ 增加成员(所有类型) - ✅ 编辑成员信息 - ✅ 删除成员 - ✅ 导入数据 - ✅ 所有查看和查询操作 **不能做**: - ❌ 删除家族树 - ❌ 邀请/移除协作者 - ❌ 清空数据 --- ### 🟢 VIEWER(查看者) **可用按钮**: 30+ 个 | **权限**: 只读 **可以做**: - ✅ 查看所有信息 - ✅ 搜索和筛选 - ✅ 关系查询 - ✅ 导出和打印 - ✅ 视图控制 **不能做**: - ❌ 任何增删改操作 - ❌ 导入数据 - ❌ 管理操作 --- ## 💻 代码实现 ### 权限检查函数 ```typescript // lib/permissions.ts export const permissions = { canCreate: (role) => role === "OWNER" || role === "EDITOR", canUpdate: (role) => role === "OWNER" || role === "EDITOR", canDeleteMember: (role) => role === "OWNER" || role === "EDITOR", canDeleteTree: (role) => role === "OWNER", canManageCollaborators: (role) => role === "OWNER", canClearData: (role) => role === "OWNER", canView: (role) => true, canExport: (role) => true, } ``` ### 使用示例 ```tsx // 条件渲染(推荐) {permissions.canCreate(role) && ( )} {permissions.canDeleteTree(role) && ( )} // 禁用状态 ``` --- ## 📊 权限矩阵 | 操作 | OWNER | EDITOR | VIEWER | |-----|-------|--------|--------| | 查看 | ✅ | ✅ | ✅ | | 搜索 | ✅ | ✅ | ✅ | | 导出 | ✅ | ✅ | ✅ | | 增加 | ✅ | ✅ | ❌ | | 编辑 | ✅ | ✅ | ❌ | | 删除成员 | ✅ | ✅ | ❌ | | 删除树 | ✅ | ❌ | ❌ | | 管理协作 | ✅ | ❌ | ❌ | | 清空数据 | ✅ | ❌ | ❌ | --- ## 🔍 快速查找 ### 仅 OWNER(5个按钮) 1. 删除家族树 2. 邀请协作者 3. 移除协作者 4. 清空数据 5. 清空日志 ### OWNER + EDITOR(25个按钮) - 所有增加按钮(8个) - 所有编辑按钮(5个) - 删除成员(1个) - 导入操作(2个) - 其他编辑操作(9个) ### 所有角色(30个按钮) - 查看按钮(6个) - 搜索按钮(5个) - 导出按钮(4个) - 视图控制(5个) - 导航按钮(10个)