Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more
All,
WithIn the PowerBiClient SDK I want to update / set a Row-level Security roles.
The Group will then be visible in underlying screen.
Thanks in advance
Solved! Go to Solution.
This cannot be done by the PowerBIClient SDK.
For now I have the following solution. It's not nice, but it works. based on the Microsoft.AnalysisServices.Tabular lib.
public async Task SetRowLevelSecurity(string groupName, string datasetId, Guid domainGroupId, string domainName, string tenantId)
{
_authenticationResult ??= await GetAccessToken();
var dataSource = $"powerbi://api.powerbi.com/v1.0/{domainName}/{groupName}";
using var server = new Server();
server.Connect($"DataSource={dataSource};Password={_authenticationResult.AccessToken}");
var database = server.Databases.Find(datasetId) ?? throw new NullReferenceException(_cannotFindDataSet);
// Cast is needed otherwise the loading does not work
var model = (Model)database.Model;
var role = model.Roles.Find(<RoleName>);
if (role is not null)
{
var memberName = $"obj:{domainGroupId}@{tenantId}";
var member = role.Members.FirstOrDefault(m => m.Name.Contains(memberName, StringComparison.OrdinalIgnoreCase));
if (member is not null)
{
return;
}
role.Members.Add(new ExternalModelRoleMember
{
MemberName = memberName,
MemberType = RoleMemberType.Group,
IdentityProvider = "AzureAD"
});
database.Model.SaveChanges();
logger.LogInformation("Row Level Security set for {GroupId} for dataset {DataSetId}", domainGroupId, datasetId);
}
}This cannot be done by the PowerBIClient SDK.
For now I have the following solution. It's not nice, but it works. based on the Microsoft.AnalysisServices.Tabular lib.
public async Task SetRowLevelSecurity(string groupName, string datasetId, Guid domainGroupId, string domainName, string tenantId)
{
_authenticationResult ??= await GetAccessToken();
var dataSource = $"powerbi://api.powerbi.com/v1.0/{domainName}/{groupName}";
using var server = new Server();
server.Connect($"DataSource={dataSource};Password={_authenticationResult.AccessToken}");
var database = server.Databases.Find(datasetId) ?? throw new NullReferenceException(_cannotFindDataSet);
// Cast is needed otherwise the loading does not work
var model = (Model)database.Model;
var role = model.Roles.Find(<RoleName>);
if (role is not null)
{
var memberName = $"obj:{domainGroupId}@{tenantId}";
var member = role.Members.FirstOrDefault(m => m.Name.Contains(memberName, StringComparison.OrdinalIgnoreCase));
if (member is not null)
{
return;
}
role.Members.Add(new ExternalModelRoleMember
{
MemberName = memberName,
MemberType = RoleMemberType.Group,
IdentityProvider = "AzureAD"
});
database.Model.SaveChanges();
logger.LogInformation("Row Level Security set for {GroupId} for dataset {DataSetId}", domainGroupId, datasetId);
}
}Hi @BartHuls
Please do raise your new thoughts in the ideas forum and upvote it so that it will be adressed by the Microsoft internal team.
Best Regards,
Community Support Team _ C Srikanth.
Not currently available in any of the APIs. If this is important to you please consider voting for an existing idea or raising a new one at https://ideas.fabric.microsoft.com
Is there a way to set this from the outside? how to a access a xmla endpoint
If this is important to you please consider voting for an existing idea or raising a new one at https://ideas.fabric.microsoft.com
Check out the November 2025 Power BI update to learn about new features.
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 |
| User | Count |
|---|---|
| 10 | |
| 10 | |
| 4 | |
| 3 | |
| 3 |