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

Blazor集成SSRS报表:如何实现基于当前用户组/分支的权限报表

Blazor + SSRS 实现用户组级报表数据过滤方案

针对你需要让用户仅查看所属组/分支报表内容的需求,可按以下步骤实现:

1. 在Blazor中获取当前用户的组信息

通过Blazor的身份验证组件获取用户所属组,比如从Claims中提取(假设组信息已在用户登录时写入Claims):

private async Task<string> GetCurrentUserGroup()
{
    var authState = await _authenticationStateProvider.GetAuthenticationStateAsync();
    var currentUser = authState.User;
    // 替换为你实际存储组信息的ClaimType
    var userGroup = currentUser.FindFirst("BranchGroup")?.Value;
    return userGroup ?? string.Empty;
}

2. 给SSRS报表添加接收组信息的参数

在SSRS报表设计器中创建一个隐藏参数(命名为UserGroup),用于接收Blazor传递的组值。根据需求设置参数是否允许空值/多值(如果用户属于多个组,可开启多值选项)。

3. 给报表数据集添加过滤逻辑

修改报表的数据集查询,加入基于UserGroup参数的过滤条件,确保只返回对应组的数据:

-- 单组过滤示例
SELECT ReportField1, ReportField2, BranchGroup
FROM YourReportDataTable
WHERE BranchGroup = @UserGroup

-- 多组过滤示例(需参数开启多值)
SELECT ReportField1, ReportField2, BranchGroup
FROM YourReportDataTable
WHERE BranchGroup IN (@UserGroup)

如果使用存储过程,直接将@UserGroup作为参数传入即可。

4. Blazor调用SSRS时传递组参数

在Blazor中加载SSRS报表(无论是通过嵌入控件还是REST API),将获取到的用户组信息作为参数传递给报表:

// 示例:构造报表参数字典
var reportParams = new Dictionary<string, object>
{
    { "UserGroup", await GetCurrentUserGroup() }
};

// 后续根据你使用的SSRS嵌入方式(比如ReportViewer控件、REST API渲染),将参数传入报表请求

5. 服务器端额外校验(可选)

为防止用户手动篡改参数,可在SSRS服务器端增加一层验证:

  • 如果使用AD身份验证,可在数据集查询中通过SUSER_SNAME()获取当前用户,再关联到AD组进行二次过滤。
  • 或者在SSRS报表的代码中,通过User!UserID获取用户ID,结合后台组信息校验参数合法性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:20:35