山东大学项目实训(七):项目实训跟踪过程的OpenClaw开放智能
一、工作进度汇报
本周主要完成认证与权限相关的数据模型设计工作。数据模型是认证与权限系统的基础,决定了如何存储和管理用户、角色、权限信息。
用户模型完成的设计包括:用户基本信息字段,包括用户ID、用户名、密码哈希、邮箱、创建时间等。用户状态字段,包括是否激活、最后登录时间等。用户安全字段,包括密码错误次数、锁定时间等。
角色模型完成的设计包括:角色基本信息字段,包括角色ID、角色名称、角色描述等。角色权限字段,存储角色的权限列表。角色用户关联字段,存储属于该角色的用户列表。
权限模型完成的设计包括:权限基本信息字段,包括权限ID、权限名称、权限代码等。权限路径字段,存储API路径。权限方法字段,存储HTTP方法。
本周共完成3个数据模型,约30个数据库字段,定义了5个表关系。
二、项目处理思路
用户模型设计需要考虑安全性。密码使用BCrypt哈希存储,即使数据库泄露也无法还原明文。密码错误次数记录用于防止暴力破解。锁定机制用于保护账户安全。
角色模型设计采用RBAC模型。角色是权限的集合,用户属于角色。修改角色的权限时,所有属于该角色的用户自动获得新权限。这种设计的优势是权限管理方便,只需要修改角色,不需要修改每个用户。
权限模型设计采用最小权限原则。每个权限只控制一个API路径加方法。权限代码采用有意义的命名,如user:read、user:write。权限路径存储API的路径,支持通配符匹配。
三、框架搭建思路
认证模块目录结构为:
models/
├── user.py # 用户模型
├── role.py # 角色模型
└── permission.py # 权限模型
技术选型方面,SQLAlchemy选择了因为它支持ORM操作。MySQL选择了因为它稳定可靠。
四、关键代码思路
4.1 用户模型定义
用户模型包含密码哈希和安全字段。
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
username = Column(String(50), unique=True, nullable=False)
email = Column(String(100), unique=True, nullable=False)
password_hash = Column(String(100), nullable=False)
# 安全字段
failed_attempts = Column(Integer, default=0)
locked_until = Column(DateTime, nullable=True)
last_login = Column(DateTime, nullable=True)
# 时间戳
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
# 关系
roles = relationship('Role', secondary=user_roles, back_populates='users')
4.2 角色模型定义
角色模型包含权限列表。
class Role(Base):
__tablename__ = "roles"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
description = Column(String(200))
# 关系
permissions = relationship('Permission', secondary=role_permissions)
users = relationship('User', secondary=user_roles, back_populates='roles')
4.3 权限检查
权限检查使用数据库查询。
def check_permission(user_id: int, path: str, method: str) -> bool:
user = db.query(User).filter(User.id == user_id).first()
if not user:
return False
for role in user.roles:
for perm in role.permissions:
if perm.path == path and perm.method == method:
return True
return False
五、代码设计优点
-
密码哈希的优势:BCrypt包含盐值,防止彩虹表攻击。多次哈希,防止暴力破解。安全可靠。
-
RBAC模型的优势:权限管理方便。修改角色自动影响所有用户。层次清晰。
-
关系映射的优势:使用SQLAlchemy的relationship,可以通过user.roles直接获取用户的角色列表。
六、本周总结
本周完成了认证与权限数据模型的设计工作。通过这个项目,我深入学习了用户模型设计,掌握了RBAC权限模型,学会了关系映射。
数据模型是系统的基础。合理的模型设计可以让后续的开发更加高效。这些经验对后续的开发工作很有帮助。
更多推荐

所有评论(0)