fastapi tortoise-orm rbac权限管理设计实现
时间: 2024-10-06 14:01:52 浏览: 63
FastAPI是一个用于构建Web API的高性能Python框架,而Tortoise-ORM是一个轻量级的 ORM,它提供了一个简洁的方式来操作数据库。对于RBAC(Role-Based Access Control,基于角色的访问控制)权限管理的设计实现,我们可以结合这两个工具构建一个安全性较高的系统:
1. **模型设计**:
- 创建用户模型(User),包含基本信息如用户名、密码等,并关联到用户的角色(Role)。
```python
class User(models.Model):
username = models.CharField(...)
password = models.CharField(...)
role = models.ForeignKey(Role, on_delete=models.CASCADE)
```
2. **角色模型**(Role):
- 定义不同的角色,例如管理员、普通用户等,每个角色可能有不同的权限集。
```python
class Role(models.Model):
name = models.CharField(unique=True)
permissions = JSONField() # 使用JSONField存储权限信息
```
3. **权限管理**:
- 对于每一个API路由,可以添加装饰器来检查用户是否有执行该操作的必要权限。使用Tortoise-ORM查询用户的role并判断其permissions是否包含了对应的操作。
```python
from fastapi import Depends, HTTPException, status
def has_permission(permission: str, user: User = Depends(get_current_user)):
if permission not in user.role.permissions:
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Permission denied")
```
4. **中间件`get_current_user`**:
- 可能需要自定义中间件函数,从请求头或会话中获取当前登录的用户。
5. **授权逻辑**:
- 用户登录成功后,服务器返回带有用户信息的JWT(JSON Web Token),在处理每个请求时验证token并加载用户数据。
6. **注册服务**:
- 提供用户注册、登录、角色分配等功能,更新或删除用户角色时同步更新权限。
阅读全文