ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Fiori权限排查利器:用FLIA反查Intent与角色归属

Fiori权限排查利器:用FLIA反查Intent与角色归属 做 Fiori 授权的顾问十有八九都遇到过这样的问题用户说“我在 Launchpad 上看得到这个砖块Tile点进去却报错没权限”或者反过来“这个应用到底在哪些角色里我想给一批人开权限怎么找最稳”前者是权限对象不够后者是角色归属不清晰。如果你是靠肉眼去 PFCG 里一个一个翻菜单树运气好十几分钟运气不好一上午就没了。这时候就需要一个能反查 Intent 归属的工具——SAP 官方提供的 /UI2/FLIAFiori Launchpad Intent Analysis就是用来干这件事的。/UI2/FLIA 这个事务码说它是福利一点不过分。它能根据一个语义对象加动作的组合也就是 Intent直接告诉你这个 Intent 被哪些 Fiori Catalog 引用、挂在哪些 Fiori Group 下、最终分配给了哪些 PFCG 角色还能顺带看到应用类型、OData 服务绑定情况。本文就围绕这个核心场景把从原理到实操、从正向定位到反向排查的完整流程拆开讲清楚。1. 先把 Intent 和 Fiori 授权的关系理清楚1.1 从磁贴到 OData 服务的那一跳Fiori 里每次点击磁贴其实不是直接打开一个 URL而是先通过 Launchpad 去解析一个 Intent。Intent 的格式不复杂就是#SemanticObject-Action比如我们经常遇到的#PurchaseOrder-Manage、#Material-Display、#SalesOrder-Manage。语义对象Semantic Object描述“这个业务对象是什么”动作Action描述“对这个对象做什么操作”两者组合就唯一指向一个应用或者一个页面。这个样子看起来只是命名规范但对权限体系来说它是唯一的锚点。PFCG 角色维护的是 Fiori Catalog 和 Fiori GroupCatalog 里包含的每个应用都自带语义对象和动作Launchpad 在运行时把磁贴的 Intent 去匹配 Catalog 里的应用定义匹配上了才显示磁贴、才允许跳转。所以如果你想知道某个磁贴归谁管核心思路就是反查这个 Intent。这里有个容易混淆的点同一个 Intent 可能对应多个 Catalog因为不同应用可以复用同一个语义对象和动作名反过来一个 Catalog 里可能包含几十上百个 Intent。所以你在 FLIA 里查到一个 Intent 会返回多行结果这并不奇怪关键是要看后续的权限角色覆盖范围。1.2 Fiori 角色权限的三件套要真正看懂 /UI2/FLIA 的列表得先建立三层模型的概念Fiori Catalog、Fiori Group、PFCG 角色。Fiori Catalog目录负责给应用分组它直接挂应用定义也就是在某个 Catalog ID 下面有多个 Intent 对应的应用。它是功能层面的集合。Fiori Group组负责 Launchpad 页面上的布局是把 Catalog 里的应用挑一部分放到某个页签或分组里。它更像“UI 布局集合”。PFCG 角色把 Catalog 和 Group 打包分配给具体用户。在 SU01 里给用户分配角色后Launchpad 才会为这个人渲染出磁贴并且后端权限对象也通过角色附带。这里最绕的地方在于用户能看见磁贴说明角色里有对应的 Group/Catalog但点进去能不能用还要看角色里有没有携带后端 OData 服务的授权对象比如S_SERVICE、S_ICF、S_RFC以及业务数据相关的权限对象。/UI2/FLIA 主要解答前半段——“这个 Intent 在哪些角色里”后半段要靠 SU53 和 ST01 辅助判断。把两段接起来才算是一条完整的授权分析链路。2. /UI2/FLIA 的功能逻辑和界面拆解2.1 事务码进去后的界面和关键字段用事务码/N/UI2/FLIA进入或者通过 SAP GUI 的 SE93 直接跳转。界面入口不复杂主要是一个筛选查询页给出几个条件就能出结果。核心筛选字段如下Semantic Object要查的语义对象比如 PurchaseOrder不区分大小写但建议保持一致。Action动作名称例如 Manage、Display、Approve。Catalog ID / Group ID如果只知道某个 Catalog 或 Group也可以反查下面的应用。PFCG Role如果已经锁定某个角色可以直接查这个角色下挂了哪些 Catalog 和 Intent。应用类型可以区分是 OData 应用还是老式 Web Dynpro / GUI 应用。查询结果通常包含Intent、应用名称、Catalog ID、Catalog 描述、Group ID、Group 描述、PFCG 角色、角色描述以及最后分配给哪些用户通过角色用户清单间接看。实际使用中我的习惯是如果查 Intent就尽量同时带上 Semantic Object 和 Action不要只填一个否则结果量会很大。如果你是反查角色就填 PFCG Role结果里会列出这个角色包含的所有 Catalog 和 Group以及背后的 Intent。如果想从用户出发查“这个人到底能打开哪些应用”可以先用 SU01 看他有哪些角色再拿着角色列表逐个进 FLIA 反查这种做法的效率远高于在 PFCG 里人工翻菜单。2.2 核心判定逻辑FLIA 怎么拿到这些信息FLIA 之所以能做到这种跨层级的反查本质是因为它读取了系统里的 Catalog 应用注册表和角色菜单表。SAP 在 Gateway 层有 IW_BEP 相关表在角色层有 AGR_1251角色菜单表在目录层有 /UI2/ 开头的一组表例如 /UI2/FLP_CAT_PG 用于维护 Catalog 和 Group 的结构/UI2/PB_C_DEF 和 CDS 视图用于维护应用定义。FLIA 相当于把这些表做了一层关联封装它在界面上的表现是“查得很快、结果很直观”你不用自己去写 ABAP 程序连这些表也不用担心表连接错误。这也是为什么我建议团队里的 Fiori 管理员优先用 FLIA而不是自己去 SE11 或 SE16N 里翻表——官方工具已经把最容易翻车的关联逻辑处理好了。再往深处说FLIA 还区分了“技术上 Catalog 里有”和“用户在 Launchpad 上真能看到”这两件事。Catalog 里有不代表用户一定看得到因为用户角色里必须参考了这个 Catalog而 Group 里有没有决定了页面上有没有这个磁贴。FLIA 的结果同时展示这两个维度你在看结果时一定要分清楚最关键的列是 PFCG 角色列其余 Catalog、Group 列是辅助判断的信息。3. 完整实战从新需求到旧问题都能用 FLIA 搞定3.1 正向场景新需求来了怎么快速找到该加哪个角色最常见的情况是业务部门提需求说“我们要让一批采购员能在 Fiori 上做采购订单审批请开通权限”。你要是直接进 PFCG新建一个角色然后开始找“审批采购订单”的磁贴碰到的第一个问题就是——Catalog 那么多到底哪个才是对的光猜名字就能卡半天。用 FLIA整个流程可以收敛成四步。第一步确认业务的 Intent。问业务用户要磁贴名称或者自己去 Launchpad 上找一个已经开了权限的账号截个图把磁贴名拿到手。然后在 FLIA 里用语义对象搜索比如采购订单审批通常可以拆出PurchaseOrder-Release或者PurchaseOrder-Approve这类 Intent。第二步查 Intent 看 Catalog。在 FLIA 的查询页输入语义对象和动作点执行。结果里会列出这个 Intent 所在的所有 Catalog ID比如/UI2/CATALOG/PURCHASING或SAP_TC_BC_PO开头的一串。这里你会发现不同角色模板的 Catalog 命名习惯不太一样。没关系先记录 Catalog ID。第三步反查 PFCG 角色。拿 Catalog ID 再查一次或者在原有查询结果里看“PFCG Role”列。你就知道这个 Intent 被哪些标准角色或自定义角色引用了。通常采购相关的需求会有标准角色模板SAP_BR_BUYER_PROCESS、SAP_BR_PURCHASER之类的如果你的系统是 S/4HANA 或升级过 Fiori 标准库标准角色里基本都带了对应 Catalog。第四步复制或扩展角色。如果系统中已有自定义角色是基于标准模板改的最稳妥的做法是用 PFCG 复制标准角色或者把对应 Catalog 手动添加进已有角色。需要注意角色里加了 Catalog不代表用户立刻就能在 Launchpad 上看到磁贴。Fiori Launchpad 的 Catalog 分配和 Group 分配是通过 PFCG 角色一起传递的如果角色里只有 Catalog 没有 Group用户在“应用查找器”里能看到应用但首页可能没有磁贴。所以新需求里一般要同时确认 Group 是否也需要。用 FLIA 查 Intent 时结果里会带 Group 列把这个信息一并参考进角色配置里就不会出现“权限开了但首页找不到磁贴”的尴尬。这个流程看起来平平无奇但实测下来比在 PFCG 里找 Catalog 快得多尤其是系统里自定义角色多、命名乱的项目人工翻会翻到怀疑人生。FLIA 等于给了你一个从业务操作直达角色定义的索引。3.2 反向场景用户报错没权限怎么通过 Intent 反查缺口用户报障是另一种高发场景他说“我登录 Fiori 后点某个磁贴页面弹出一个报错说没有权限”。很多人第一反应是直接看 SU53当前程序授权检查日志但 SU53 有一个前提它记录的是当前会话当前程序的授权检查如果报错弹出来之前程序已经做了很多次权限检查或者错误发生在后台 RFC 调用里SU53 不一定能精准定位。我的建议是分两步走。先打开 FLIA输入报错磁贴对应的 Intent查一下这个 Intent 在系统里属于哪些 Catalog 和角色。然后看当前用户的角色列表确认他有没有这些角色。如果连角色都没有那就是“业务角色没分配”的问题如果角色有Catalog 有但点击还是报错那就要进入第二步——用 SU53 / ST01 查看具体缺的是哪个权限对象。举一个实际案例。之前有个用户反馈在 Launchpad 上打开“显示物料”磁贴报错没有显示物料的权限。我先用 FLIA 查#Material-Display结果里显示它挂在SAP_TC_BC_MATERIAL这个 Catalog 下对应的标准角色是SAP_BR_INVENTORY_MANAGER和SAP_BR_BUYER_PROCESS。再看用户角色发现他既有SAP_BR_BUYER_PROCESSCatalog 也同步过来了磁贴都正常显示。那问题就不在“有没有角色”上。继续点开报错弹窗用户给我发了弹窗消息里面有权限对象名M_MATE_STA和M_MATE_MAINT我让他在报错画面的“授权名称”标签页里点“显示详情”把缺失的权限对象截给我发现是M_MATE_STA的字段值PSTAT物料状态缺少了值。这就不是 FLIA 能解决的业务授权问题而是角色里的权限对象字段值维护不全。最终在 PFCG 里打开该角色在“权限”页签维护好对应的物料状态值重新生成参数文件用户刷新 Launchpad 就好了。这个案例想说明一个点FLIA 负责“定位角色归属”这一层SU53 / ST01 负责“具体权限对象缺口”这一层两者配合才能把“没权限”这个问题拆得干净。不要在 FLIA 里试图找权限对象级别的信息那不是它的职责范围。4. 常见问题与排查技巧实录用久了 FLIA有几个高频问题按经验整理出来遇到可以直接查表对照。现象可能原因处理方式FLIA 查询结果为空输入 Intent 中语义对象/动作拼写不一致或者系统里该应用未激活先在 Launchpad 磁贴属性里复制 Intent检查 Gateway 的 IW_BEP 是否激活对应服务查询出很多重复行同一个 Catalog 被多个角色引用或一个角色里重复添加了同个 Catalog按 PFCG 角色去重检查角色菜单里是否有冗余 Catalog 条目查到了 Catalog 但 PFCG 角色列是空目录已激活但没有角色引用或引用的是已删除角色检查角色是否被标记删除查看哪个角色在 PFCG 里被删了但 Catalog 还在用户有角色Launchpad 上看不到磁贴Group 没有分配或 Fiori Launchpad 缓存未刷新用 /UI2/INVALIDATE_GLOBAL_CACHE 清缓存检查角色是否分配了对应的 Group磁贴能看到但点击跳转失败OData 服务未激活或服务路径配置错误用 SICF 检查服务的 ICF 节点激活状态用 /IWFND/MAINT_SERVICE 检查 Gateway 服务FLIA 事务码无法打开登录用户缺少 Fiori Launchpad 分析相关权限临时用 SAP_ALL 账号分析检查角色是否缺失 /UI2/FLIA 的授权对象这里重点说两个容易被坑的点。第一个是缓存。Fiori Launchpad 对 Catalog、Group 是有缓存的PFCG 角色调整之后不是立刻就能在用户界面上看到效果。很多运维人员改完角色就在那干等用户过来说“还是不行”最后发现只是缓存没刷新。SAP 标准做法是通过事务码/UI2/INVALIDATE_GLOBAL_CACHE清理全局缓存或者是让用户重新登录几次。做 FLIA 分析时务必先确认数据不是缓存里的旧数据尤其在你刚改完 PFCG 角色的情况下。第二个是 Intent 大小写和参数问题。FLIA 查询条件里语义对象和动作大概率不区分大小写但 Catalog 和 Group 的 ID 是区分大小写的。我之前遇到过一个人查#material-display有结果换成#Material-Display结果也一样但拿 Catalog ID 去 PFCG 里搜小写就搜不到大写就能搜到。所以建议查询时先确认 Catalog ID 的大小写习惯否则容易误判“这个角色没引用这个 Catalog”。第三个技巧是关于“怎么快速知道一个角色下到底有哪些 Intent”。在 FLIA 里用 PFCG 角色作为筛选条件结果里会有“Intent”列。这个比在 PFCG 里展开菜单树要清晰得多因为菜单树显示的可能是文件夹层级而 FLIA 直接给你应用列表。做角色瘦身、重复 Catalog 检查这种运维活用这个方法效率很高。5. 与 SU53、SUIM、PFCG 打配合的完整授权链路FLIA 不是万能的它聚焦在“Intent - Catalog/Group - PFCG 角色”这段链路。但实际的 Fiori 授权问题往往是跨层的用户有没有角色、角色有没有带权限对象、权限对象字段值够不够、OData 服务有没有激活、ICF 节点有没有启用。任何一个环节断了最终表现都是“打不开”但真正的断点在哪儿需要一套方法论。我在项目上通常用四段式排查第一段确认 Intent 归属。用 /UI2/FLIA 查确定这个磁贴对应的角色和 Catalog。第二段确认用户角色覆盖。用 SU01 看用户角色列表对照 FLIA 的结果判断是“缺角色”还是“有角色权限不全”。第三段确认权限对象缺口。如果用户有角色但点应用还报错让用户停留在报错页面查看报错详情的授权标签页或者用 SU53 看当前程序最后失败的权限检查记录。再复杂一点可以用 ST01 开启授权检查追踪让用户重新操作一次从追踪日志里找 Authorization Check 失败的记录。第四段回到 PFCG 修改角色。不管缺的是 Catalog 还是权限对象字段值最终修复动作都要回到 PFCG 做。改完记得用 SUIM 的角色用户清单检查这个角色还分配给了谁避免“改一个权限影响一批人”的事故。这四段式看着简单但每一段都有经验值。比如 SU53它只能记录最后几次权限检查不是所有失败的都有要看具体报错发生的位置云环境和本地环境记录情况也有差异。再比如 ST01如果权限对象很多日志量会非常大记得先设置筛选条件再开启追踪否则日志刷屏浪费时间。我见过不少初级顾问一上来就 ST01 追踪整个操作结果日志几万条自己看哭了最后还要靠“按时间筛选 按权限对象名筛选”才能定位。另外如果是 S/4HANA 环境还可以利用 CDS 视图直接做相关检查比如某些版本里可以通过App Access By Role之类的视图来查看应用访问关系效果和 FLIA 类似但更适合用 SQL 去批量比对。不过日常交互分析FLIA 的界面已经够用CDS 视图适合自动化巡检和报表化输出。6. 实用扩展用 ABAP 批量检查 Intent 归属的方法很多管理员最后都会遇到一个问题FLIA 好用是好用但它只有界面查询一次、看一次结果如果要批量检查或者往文档里贴清单效率还是不够。这时候可以写一个简单的 ABAP 报表直接读后台表把“角色 - Catalog - Intent”的对应关系导出成 Excel。用到的核心表包括AGR_1251PFCG 角色菜单表能查到角色关联的 Catalog/Group 对象。AGR_AGRS角色组合表当角色是复合角色时可以拆到单个角色。/UI2/FLP_CAT_PGCatalog 和 Group 的关联信息。CDS 视图I_UI_FLP_Catalog或I_UI_FLP_CatalogApp不同版本命名略有差异但基本都是直接读应用定义和语义对象、动作。我提供一个思路性的 ABAP 代码框架实际使用时根据你的系统版本调整 CDS 视图名称和字段名。这段代码的作用是输入一个 PFCG 角色名导出该角色下所有 Fiori Catalog 里的 Intent 清单。REPORT zfi_intent_check. TYPES: BEGIN OF ty_result, role_name TYPE agr_1251-agr_name, catalog_id TYPE agr_1251-object_text, intent TYPE string, END OF ty_result. DATA: lt_result TYPE TABLE OF ty_result, ls_result LIKE LINE OF lt_result, lt_roles TYPE TABLE OF agr_1251. SELECT agr_name object_text FROM agr_1251 INTO CORRESPONDING FIELDS OF TABLE lt_roles WHERE agr_name SAP_BR_BUYER_PROCESS AND object_type CAT. LOOP AT lt_roles INTO DATA(ls_role). SELECT semantic_object, semantic_action FROM I_UI_FLP_CatalogApp INTO (DATA(lv_semantic_object), DATA(lv_semantic_action)) WHERE catalog_id ls_role-object_text. ls_result-role_name ls_role-agr_name. ls_result-catalog_id ls_role-object_text. CONCATENATE lv_semantic_object - lv_semantic_action INTO ls_result-intent. APPEND ls_result TO lt_result. ENDSELECT. ENDLOOP. cl_demo_outputdisplay_data( lt_result ).这段代码的思路是先查角色关联的 Catalog 对象再用 Catalog ID 去 CDS 视图里找每个应用的语义对象和动作拼成 Intent 列表。如果你在系统里找不到I_UI_FLP_CatalogApp这个视图名可以在 SE11 里搜FLP_Catalog或者检查IW_BEP、/UI2/开头的表中对应字段。结构不同没关系思路是一样的。之所以特意提这个扩展是因为很多运维场景需要“角色权限矩阵”文档人工从 FLIA 里一条一条复制既慢又容易漏。用代码导出之后配合 Excel 透视表几分钟就能生成一张清晰的对照表。7. 最后再分享一点我在实际项目里踩坑后的体会接触 /UI2/FLIA 这些技术点越久我越觉得 Fiori 权限问题的本质其实是“数据关系问题”而不是“操作问题”。权限配置不复杂复杂的是搞清楚哪个 Intent、哪个 Catalog、哪个角色、哪个权限对象彼此之间的连线。FLIA 解决的就是这个连线难题。但我还是要强调一点FLIA 给出的结果是“当前系统的快照”不是“用户权限的真相”。权限的真相只有在你结合了 PFCG 角色继承、用户组分配、单点登录映射等因素之后才能看到。例如用户在 SAP 端和 Portal 端使用不同的用户ID映射或者通过复合角色一次继承了好几个角色这些情况在 FLIA 的原始结果里并不会有特别醒目的提示需要你自己多留个心眼。实际操作中我的习惯是给 FLIA 结果加上一个转化步骤先把结果导出来再做角色覆盖比对。比如用 Excel 的 VLOOKUP 把用户主角色列表和 FLIA 的角色结果一比对马上就知道了“用户缺哪个角色”。同一个动作如果纯靠肉眼来回切换界面至少多花半小时而且还容易看错。再分享一个所有顾问都懂但总有人犯的错改角色之前一定要看“这个角色还分配给了谁”。SUIM 里用角色查用户清单和 FLIA 里的角色反查是互补关系。FLIA 告诉你是谁在功能上拥有了这个角色SUIM 告诉你是谁在实际登录上用了这个角色两个维度对不上时就是权限变更影响范围最大的时候。最后想说的是工具永远是辅助真正值钱的是分析思路。/UI2/FLIA 是这条路上一把非常称手的钥匙但一把钥匙开不了所有门。建议每个 Fiori 项目的实施或运维团队都固定出一套“Intent 反查角色 - SU53 查缺口 - SUIM 评估影响”的标准动作并把这套动作沉淀成运维手册。下次不管是谁接到权限工单照着流程走一遍都能在十分钟内给出初步结论。这比临时翻文档、临时找工具要省太多力气。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表