feat: 账套模式后端 — token绑定entity_id + user_entities授权表 + 解析链倒置

- auth_middleware: create_token存JSON{user_id,entity_id},旧int格式token强制下线
- models: 新增UserEntity授权表(user_id↔entity_id多对多,唯一约束)
- database: init_db自动建表+存量用户×active企业默认授权(平滑迁移)
- deps: get_entity_id解析链倒置 token优先 → Bot白名单(query/header校验entity active) → 默认1
- auth: login加entity_id+授权校验; 新增switch-entity/my-entities/登录页entities接口; register自动授权
This commit is contained in:
Hermes CI Fix
2026-08-11 11:24:52 +08:00
parent 9d0f070c14
commit b31f9b80c4
5 changed files with 336 additions and 20 deletions
+12 -1
View File
@@ -1,5 +1,5 @@
"""管理会计OS 数据模型"""
from sqlalchemy import Column, Integer, String, Text, Float, DateTime, ForeignKey, Boolean, JSON, func
from sqlalchemy import Column, Integer, String, Text, Float, DateTime, ForeignKey, Boolean, JSON, func, UniqueConstraint
from app.database import Base
from app.models.budget_plan import BudgetPlan
@@ -32,6 +32,17 @@ class User(Base):
created_at = Column(DateTime, server_default=func.now())
class UserEntity(Base):
"""用户-企业授权(账套模式多对多)— 新表必须带entity_id(开发规范)"""
__tablename__ = "user_entities"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False, index=True, comment="用户ID")
entity_id = Column(Integer, ForeignKey("entities.id"), nullable=False, index=True, comment="企业ID(账套)")
granted_by = Column(Integer, nullable=True, comment="授权人")
created_at = Column(DateTime, server_default=func.now())
__table_args__ = (UniqueConstraint("user_id", "entity_id", name="uq_user_entity"),)
class StrategicMap(Base):
"""战略地图"""
__tablename__ = "strategic_maps"