77 lines
8.7 KiB
XML
77 lines
8.7 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<mxfile host="app.diagrams.net" modified="2026-04-14T10:41:20.000Z" agent="Oz" version="24.7.17">
|
||
<diagram id="ctx-dfd" name="对象类数据流图">
|
||
<mxGraphModel dx="1800" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||
<root>
|
||
<mxCell id="0"/>
|
||
<mxCell id="1" parent="0"/>
|
||
<mxCell id="2" value="00 组织与权限上下文 - 对象类数据流图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;" parent="1" vertex="1">
|
||
<mxGeometry x="20" y="20" width="520" height="30" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="3" value="本模块边界说明:仅承载组织/权限与认证;AI 图谱与向量同步任务由 ai 模块统一调度(REST/JAR),目标存储为 Milvus + NebulaGraph/Neo4j" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=12;fontColor=#666666;" parent="1" vertex="1">
|
||
<mxGeometry x="20" y="52" width="1200" height="24" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="10" value="Actor<br>学生" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
|
||
<mxGeometry x="40" y="120" width="120" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="11" value="Actor<br>教师" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||
<mxGeometry x="40" y="230" width="120" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="12" value="Actor<br>机构管理员" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
|
||
<mxGeometry x="40" y="340" width="120" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="20" value="Boundary<br>MiniApp/Web UI" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||
<mxGeometry x="230" y="170" width="190" height="90" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="21" value="Boundary<br>GatewayAuthBoundary" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||
<mxGeometry x="230" y="300" width="190" height="90" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="30" value="Control<br>AuthController/AuthService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||
<mxGeometry x="500" y="120" width="240" height="90" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="31" value="Control<br>UpmsController/UpmsQueryService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||
<mxGeometry x="500" y="240" width="240" height="90" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="32" value="Control<br>RbacPolicyService" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
|
||
<mxGeometry x="500" y="360" width="240" height="90" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="40" value="Entity<br>SysUserAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||
<mxGeometry x="820" y="110" width="200" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="41" value="Entity<br>TenantDeptAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||
<mxGeometry x="820" y="210" width="200" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="42" value="Entity<br>RoleMenuAggregate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||
<mxGeometry x="820" y="310" width="200" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="43" value="Entity<br>AuthTokenStore" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
|
||
<mxGeometry x="820" y="410" width="200" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="50" value="PostgreSQL(upms/auth)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||
<mxGeometry x="1090" y="190" width="220" height="80" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="51" value="Redis(Session/Token)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||
<mxGeometry x="1090" y="320" width="220" height="80" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="60" value="设计方法与原因<br>1) BCE分层明确交互职责<br>2) 鉴权与查询控制器分离,便于独立扩展<br>3) 菜单授权判定集中到Policy服务,降低重复逻辑<br>4) Token热数据落Redis,用户组织主数据落PG<br>5) AI同步调度配置通过权限体系统一管控" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;" parent="1" vertex="1">
|
||
<mxGeometry x="1360" y="190" width="360" height="180" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="100" value="登录/路由请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="10" target="20" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="101" value="教学管理请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="11" target="20" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="102" value="高权限请求" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="12" target="21" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="103" value="Token校验" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="21" target="30" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="104" value="当前用户/菜单查询" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="20" target="31" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="105" value="权限判定" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="31" target="32" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="106" value="用户读取" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="30" target="40" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="107" value="组织读取" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="31" target="41" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="108" value="角色菜单读取" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="32" target="42" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="109" value="Token签发/撤销" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="30" target="43" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="110" value="持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="40" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="111" value="持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="41" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="112" value="持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="42" target="50" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
<mxCell id="113" value="缓存" style="edgeStyle=orthogonalEdgeStyle;rounded=0;jettySize=auto;html=1;endArrow=block;endFill=1;" parent="1" source="43" target="51" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||
</root>
|
||
</mxGraphModel>
|
||
</diagram>
|
||
</mxfile>
|