200 lines
5.0 KiB
Markdown
200 lines
5.0 KiB
Markdown
# 🔐 权限快速参考
|
||
|
||
## 📋 按钮分类
|
||
|
||
### 增删改类按钮(写操作)
|
||
|
||
#### ✏️ 增加类
|
||
```
|
||
添加成员 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) && (
|
||
<Button>添加成员</Button>
|
||
)}
|
||
|
||
{permissions.canDeleteTree(role) && (
|
||
<Button variant="destructive">删除家族树</Button>
|
||
)}
|
||
|
||
// 禁用状态
|
||
<Button disabled={!permissions.canUpdate(role)}>
|
||
编辑
|
||
</Button>
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 权限矩阵
|
||
|
||
| 操作 | OWNER | EDITOR | VIEWER |
|
||
|-----|-------|--------|--------|
|
||
| 查看 | ✅ | ✅ | ✅ |
|
||
| 搜索 | ✅ | ✅ | ✅ |
|
||
| 导出 | ✅ | ✅ | ✅ |
|
||
| 增加 | ✅ | ✅ | ❌ |
|
||
| 编辑 | ✅ | ✅ | ❌ |
|
||
| 删除成员 | ✅ | ✅ | ❌ |
|
||
| 删除树 | ✅ | ❌ | ❌ |
|
||
| 管理协作 | ✅ | ❌ | ❌ |
|
||
| 清空数据 | ✅ | ❌ | ❌ |
|
||
|
||
---
|
||
|
||
## 🔍 快速查找
|
||
|
||
### 仅 OWNER(5个按钮)
|
||
1. 删除家族树
|
||
2. 邀请协作者
|
||
3. 移除协作者
|
||
4. 清空数据
|
||
5. 清空日志
|
||
|
||
### OWNER + EDITOR(25个按钮)
|
||
- 所有增加按钮(8个)
|
||
- 所有编辑按钮(5个)
|
||
- 删除成员(1个)
|
||
- 导入操作(2个)
|
||
- 其他编辑操作(9个)
|
||
|
||
### 所有角色(30个按钮)
|
||
- 查看按钮(6个)
|
||
- 搜索按钮(5个)
|
||
- 导出按钮(4个)
|
||
- 视图控制(5个)
|
||
- 导航按钮(10个)
|