一、工作进度汇报

本周主要完成认证与权限相关的数据模型设计工作。数据模型是认证与权限系统的基础,决定了如何存储和管理用户、角色、权限信息。

用户模型完成的设计包括:用户基本信息字段,包括用户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

五、代码设计优点

  1. 密码哈希的优势:BCrypt包含盐值,防止彩虹表攻击。多次哈希,防止暴力破解。安全可靠。

  2. RBAC模型的优势:权限管理方便。修改角色自动影响所有用户。层次清晰。

  3. 关系映射的优势:使用SQLAlchemy的relationship,可以通过user.roles直接获取用户的角色列表。

六、本周总结

本周完成了认证与权限数据模型的设计工作。通过这个项目,我深入学习了用户模型设计,掌握了RBAC权限模型,学会了关系映射。

数据模型是系统的基础。合理的模型设计可以让后续的开发更加高效。这些经验对后续的开发工作很有帮助。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐