我已使用here给出的服务主体嵌入了power bi报告。
我正在如下生成嵌入令牌,
var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel:"View",allowSaveAs:false,identities: new EffectiveIdentity[] { new EffectiveIdentity(username: serviceAccount, roles: new string[] { "Viewer" }, datasets: new string[] { report.DatasetId }) });
EmbedToken embedToken = client.Reports.GenerateTokenInGroup(groupId, reportId, generateTokenRequestParameters);
但是当我使用javascript sdk嵌入报告时,如果我将权限配置如下,则用户可以编辑报告。如何防止用户编辑嵌入令牌中的报告?
permissions: models.Permissions.ReadWrite,
viewMode: models.ViewMode.Edit,
答案 0 :(得分:0)
我有一个嵌入PowerBI报告的C#MVC Web应用程序。
这是我们的嵌入配置
var config = {
type: 'report',
id: embedReportId,
accessToken: accessToken,
tokenType: models.TokenType.Embed,
embedUrl: embedUrl,
permissions: models.Permissions.View,
settings: {
filterPaneEnabled: false,
navContentPaneEnabled: true,
background: models.BackgroundType.Transparent,
layoutType: models.LayoutType.Custom,
customLayout: {
displayOption: models.DisplayOption.FitToWidth
}
}
};
您在问题中提到了viewMode属性。如您所见,我们甚至没有在配置中设置viewMode属性。我们只设置了权限属性,但据我所知,它并没有做什么用。此属性很少使用,或仅控制您可以在UI上看到的次要内容。
如果您像生成“视图”那样生成访问令牌,并且有人编辑嵌入的报表查看器页面以将权限属性从models.Permissions.View更改为models.Permissions.ReadWrite,则HTML / javascript中的任何后续调用在该报告查看器页面编辑之后,PowerBI JavaScript库尝试进行的操作将失败,因为生成的访问令牌是针对View而不是Edit的,并且对Microsoft / PowerBI的API调用也会失败。
因此,您实际上仅需要确保无论查看上下文如何,后端逻辑都会生成正确的访问令牌。如果您要生成具有完全权限的访问令牌,并使用PowerBI javascript库隐藏内容,则用户可能会更改您的页面源代码,并且做得比您想做的还要多。
祝你好运