You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI嵌入Liferay实现登录用户数据权限控制问题咨询

解决方案:Power BI报表嵌入Liferay并实现用户级数据过滤

核心问题说明

你遇到的登录提示本质是**「发布到Web」功能的局限性**:该功能仅用于公开无权限限制的报表嵌入,不支持传递用户身份上下文,因此无法配合RLS(行级别安全)实现基于Liferay登录用户的个性化数据过滤。只要报表配置了RLS,通过「发布到Web」嵌入时必然会触发登录验证,因为RLS需要明确的用户身份来执行过滤规则。

要实现需求,需改用Power BI企业级嵌入方案,结合RLS和身份传递来完成,具体步骤如下:


步骤1:正确配置RLS规则

在Power BI Desktop中完成RLS的基础配置:

  • 打开报表,切换到「建模」选项卡,点击「管理角色」
  • 创建新角色(例如命名为LiferayAuthenticatedUser)
  • 针对数据模型中的业务表添加过滤规则:
    • 如果用用户邮箱作为标识:
      [用户邮箱字段] = USERPRINCIPALNAME()
      
    • 如果用Liferay用户ID作为标识,且模型中有邮箱与ID的映射表:
      [用户ID字段] = LOOKUPVALUE('用户映射表'[UserID], '用户映射表'[Email], USERPRINCIPALNAME())
      
  • 验证规则:点击「查看为角色」,选择创建的角色并输入测试用户邮箱,确认数据过滤符合预期

步骤2:发布报表到Power BI服务并配置权限

  • 将报表发布到你的Power BI工作区(建议使用Premium容量工作区,避免每个Liferay用户都需要Power BI Pro许可证)
  • 在Power BI服务中,进入报表所在工作区:
    1. 确认RLS角色已同步生效
    2. 给用于嵌入的服务主体(或Liferay集成应用)分配「成员」或「参与者」权限
    3. 开启工作区的「允许嵌入」设置(在工作区设置的「嵌入」选项中配置)

步骤3:Liferay中嵌入报表并传递用户身份

根据Liferay的身份体系选择对应嵌入方式:

方式A:Liferay用户已同步到Azure AD

如果Liferay使用Azure AD做身份验证,直接采用**「用户拥有的数据」嵌入方式**:

  • 在Liferay中开发嵌入组件,获取当前登录用户的UPN(用户主体名称,即邮箱)
  • 使用Power BI JavaScript SDK加载报表,自动传递用户身份,RLS会基于USERPRINCIPALNAME()自动过滤数据

方式B:Liferay用户未同步到Azure AD

采用**「应用拥有的数据」嵌入方式**,通过自定义身份传递实现:

  • 修改RLS规则,改用CUSTOMDATA()函数获取传递的用户标识:
    [用户ID字段] = CUSTOMDATA()
    
  • 在Liferay中调用Power BI REST API生成嵌入令牌,将当前登录用户的ID或邮箱作为customData参数传入
  • 使用生成的嵌入令牌通过Power BI JavaScript SDK加载报表,RLS会基于CUSTOMDATA()的值过滤数据

关键注意事项

  • 彻底放弃「发布到Web」功能,该方案不支持任何身份相关的权限控制
  • 若使用Power BI Pro工作区,每个查看报表的Liferay用户都需要拥有Power BI Pro许可证;若使用Premium容量,仅需容量许可,无需用户单独授权
  • 确保Liferay与Power BI之间的身份传递逻辑安全,避免用户标识泄露

内容的提问来源于stack exchange,提问作者Deepam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:03:12