1. 控制流程
[!note] 流程图的绘制Mermaid参考连接,要注意的是,mermaid的有些语法gitbook是不支持的,比如三角图{}就不可以
流程全局
graph TD
Requester(请求方)
AG(网关)
AG_CHECK_TOKEN_FORMAT(令牌格式有效?)
AG_CHECK_TOKEN_FORMAT_FAIL(拒绝服务:令牌格式无效)
AG_CHECK_TOKEN_FORMAT_PASS(令牌格式有效)
AG_CHECK_TOKEN_EXPIRE(令牌过期?)
AG_CHECK_TOKEN_EXPIRE_FAIL(拒绝服务:令牌过期)
AG_CHECK_TOKEN_EXPIRE_PASS(令牌在期)
XDUA(地球号)
Requester-->AG
AG-->AG_CHECK_TOKEN_FORMAT
AG_CHECK_TOKEN_FORMAT--N-->AG_CHECK_TOKEN_FORMAT_FAIL
AG_CHECK_TOKEN_FORMAT--Y-->AG_CHECK_TOKEN_FORMAT_PASS
AG_CHECK_TOKEN_FORMAT_PASS-->AG_CHECK_TOKEN_EXPIRE
AG_CHECK_TOKEN_EXPIRE--Y-->AG_CHECK_TOKEN_EXPIRE_PASS
AG_CHECK_TOKEN_EXPIRE--N-->AG_CHECK_TOKEN_EXPIRE_FAIL
AG_CHECK_TOKEN_EXPIRE_PASS --> XDUA
XDUA_CHECK_TOKEN_COLOR(令牌格式有效?)
XDUA_CHECK_TOKEN_COLOR_FAIL(拒绝服务:令牌格式无效)
XDUA_CHECK_TOKEN_COLOR_PASS(令牌颜色有效)
XDUA_CHECK_TOKEN_EXPIRE(令牌过期?)
XDUA_CHECK_TOKEN_EXPIRE_FAIL(拒绝服务:令牌过期)
XDUA_CHECK_TOKEN_EXPIRE_PASS(令牌合格)
XDUA --> XDUA_CHECK_TOKEN_ISS(令牌是地球号签发的吗?)
XDUA_CHECK_TOKEN_ISS --N--> XDUA_CHECK_TOKEN_ISS_NO(拒绝服务:非地球号令牌)
XDUA_CHECK_TOKEN_ISS --Y--> XDUA_CHECK_TOKEN_COLOR
XDUA_CHECK_TOKEN_COLOR --fail--> XDUA_CHECK_TOKEN_COLOR_FAIL
XDUA_CHECK_TOKEN_COLOR --pass--> XDUA_CHECK_TOKEN_COLOR_PASS
XDUA_CHECK_TOKEN_COLOR_PASS --> XDUA_CHECK_TOKEN_EXPIRE
XDUA_CHECK_TOKEN_EXPIRE --pass--> XDUA_CHECK_TOKEN_EXPIRE_PASS
XDUA_CHECK_TOKEN_EXPIRE --fail--> XDUA_CHECK_TOKEN_EXPIRE_FAIL
XDUA_CHECK_TOKEN_EXPIRE_PASS --> XDUA_CHECK_TOKEN_API(检查令牌和API一致性)
XDUA_CHECK_TOKEN_API --> XDUA_CHECK_TOKEN_API_ALLOWED_SHOP(令牌店铺在API店铺白名单)
XDUA_CHECK_TOKEN_API_ALLOWED_SHOP --Y--> XDUA_CHECK_TOKEN_API_ALLOWED_SHOP_YES(OK)
XDUA_CHECK_TOKEN_API_ALLOWED_SHOP --N--> XDUA_CHECK_TOKEN_API_ALLOWED_SHOP_NO(拒绝服务:在API白名单)
XDUA_CHECK_TOKEN_API_ALLOWED_SHOP_YES --> XDUA_CHECK_TOKEN_API_ALLOWED_COLOR(令牌店铺在API店铺颜色白名单?)
XDUA_CHECK_TOKEN_API_ALLOWED_COLOR --N--> XDUA_CHECK_TOKEN_API_ALLOWED_COLOR_NO(拒绝服务:令牌颜色不在API白名单?)
XDUA_CHECK_TOKEN_API_ALLOWED_COLOR --Y--> XDUA_CHECK_TOKEN_API_ALLOWED_COLOR_YES(OK)
XDUA_CHECK_TOKEN_API_ALLOWED_COLOR_YES --> XDUA_CHECK_TOKEN_TYPE(令牌类型?)
XDUA_CHECK_TOKEN_TYPE --app--> XDUA_CHECK_TOKEN_TYPE_APP(应用令牌)
XDUA_CHECK_TOKEN_TYPE --usr--> XDUA_CHECK_TOKEN_TYPE_USR(用户令牌)
XDUA_CHECK_TOKEN_TYPE_APP --> XDUA_CHECK_APP_TOKEN_IF_ANONYMUS(匿名令牌?)
XDUA_CHECK_APP_TOKEN_IF_ANONYMUS --Y--> XDUA_CHECK_APP_TOKEN_IF_ANONYMUS_YES(OK)
XDUA_CHECK_APP_TOKEN_IF_ANONYMUS --N--> XDUA_CHECK_APP_TOKEN_IF_ANONYMUS_NO(拒绝服务,应用令牌必须匿名)
XDUA_CHECK_APP_TOKEN_IF_ANONYMUS_YES --> XDUA_CHECK_APP_TOKEN_IF_COLORX(令牌是黑色吗?)
XDUA_CHECK_APP_TOKEN_IF_COLORX --N--> XDUA_CHECK_APP_TOKEN_IF_COLORX_NO(拒绝服务,应用令牌必须黑色)
XDUA_CHECK_APP_TOKEN_IF_COLORX --Y--> XDUA_CHECK_APP_TOKEN_IF_COLORX_YES(OK)
XDUA_CHECK_APP_TOKEN_IF_COLORX_YES --> XDUA_CHECK_APP_TOKEN_IF_SHOPX(令牌来自黑店铺吗?)
XDUA_CHECK_APP_TOKEN_IF_SHOPX --Y--> XDUA_CHECK_APP_TOKEN_IF_SHOPX_YES(OK)
XDUA_CHECK_APP_TOKEN_IF_SHOPX --N--> XDUA_CHECK_APP_TOKEN_IF_SHOPX_NO(拒绝服务,应用令牌必须来自黑店铺)
XDUA_CHECK_APP_TOKEN_IF_SHOPX_YES --> XDUA_CHECK_APP_TOKEN_IF_IPM(令牌IP白名单检查)
XDUA_CHECK_APP_TOKEN_IF_IPM --N--> XDUA_CHECK_APP_TOKEN_IF_IPM_NO(拒绝服务,应用令牌不在IP白名单)
XDUA_CHECK_APP_TOKEN_IF_IPM --Y--> XDUA_CHECK_APP_TOKEN_IF_IPM_YES(Okey)
XDUA_CHECK_APP_TOKEN_IF_IPM_YES --> XDUA_CHECK_APP_TOKEN_IF_DEV(令牌设备白名单检查)
XDUA_CHECK_APP_TOKEN_IF_DEV --N--> XDUA_CHECK_APP_TOKEN_IF_DEV_NO(拒绝服务,应用令牌不在设备白名单)
XDUA_CHECK_APP_TOKEN_IF_DEV --Y--> XDUA_DB(地球号DB)
subgraph app_token_db
XDUA_DB --> XDUA_DB_CHECK_APP_TOKEN_IF_EXISTS(令牌存在?)
XDUA_DB_CHECK_APP_TOKEN_IF_EXISTS --N--> XDUA_DB_CHECK_APP_TOKEN_IF_EXISTS_NO(拒绝服务:令牌不存在)
XDUA_DB_CHECK_APP_TOKEN_IF_EXISTS --Y--> XDUA_DB_CHECK_APP_TOKEN_IF_DISABLED(令牌拉黑?)
XDUA_DB_CHECK_APP_TOKEN_IF_DISABLED --Y--> XDUA_DB_CHECK_APP_TOKEN_IF_DISABLED_YES(拒绝服务:令牌拉黑)
XDUA_DB_CHECK_APP_TOKEN_IF_DISABLED --N--> XDUA_DB_CHECK_APP_TOKEN_IF_DISABLED_NO(令牌正常)
end
XDUA_DB_CHECK_APP_TOKEN_IF_DISABLED_NO --> XDUA_SERVICE_BEGIN_ENTRY1(业务服务)
XDUA_CHECK_TOKEN_TYPE_USR(用户令牌)
XDUA_CHECK_TOKEN_TYPE_USR --> XDUA_CHECK_USR_TOKEN_IF_ANONYMUS(匿名令牌?)
XDUA_CHECK_USR_TOKEN_IF_ANONYMUS --N--> XDUA_CHECK_USR_TOKEN_IF_ANONYMUS_YES(拒绝服务,用户令牌不能匿名)
XDUA_CHECK_USR_TOKEN_IF_ANONYMUS --Y--> XDUA_CHECK_USR_ROUE(角权检查)
XDUA_CHECK_USR_ROUE --> XDUA_GET_USER_RULE(数据库获取用户的权限表)
XDUA_GET_USER_RULE --> XDUA_CHECK_API_RULE_IN_USR_RULES(用户权限包含API权限)
XDUA_CHECK_API_RULE_IN_USR_RULES --Y--> XDUA_SERVICE_BEGIN_ENTRY2(业务服务)
XDUA_CHECK_API_RULE_IN_USR_RULES --N--> XDUA_CHECK_API_RULE_IN_USR_RULES_NO(拒绝服务:用户权限不够)
流程局部:用户令牌
graph TD
XDUA_CHECK_TOKEN_TYPE_USR(用户令牌)
XDUA_CHECK_TOKEN_TYPE_USR --> XDUA_CHECK_USR_TOKEN_IF_ANONYMUS(匿名令牌?)
XDUA_CHECK_USR_TOKEN_IF_ANONYMUS --N--> XDUA_CHECK_USR_TOKEN_IF_ANONYMUS_YES(拒绝服务,用户令牌不能匿名)
XDUA_CHECK_USR_TOKEN_IF_ANONYMUS --Y--> XDUA_CHECK_USR_ROUE(角权检查)
XDUA_CHECK_USR_ROUE --> XDUA_GET_USER_RULE(数据库获取用户的权限表)
XDUA_GET_USER_RULE --> XDUA_CHECK_API_RULE_IN_USR_RULES(用户权限包含API权限)
XDUA_CHECK_API_RULE_IN_USR_RULES --Y--> XDUA_SERVICE_BEGIN_ENTRY2(业务服务)
XDUA_CHECK_API_RULE_IN_USR_RULES --N--> XDUA_CHECK_API_RULE_IN_USR_RULES_NO(拒绝服务:用户权限不够)