Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
annafan
Frequent Visitor

Can I update Row-level security via Rest API?

Can I update Row-level security via Rest API?

How can I do that?

3 ACCEPTED SOLUTIONS
d_gosbell
Super User
Super User

If you mean can you add users to an RLS role you defined in the pbix file, then the answer is yes,

 

You can get a list of the roles in a specified report with a call like

http://localhost/reports/api/v2.0/PowerBIReports(1fe72f5d-5cce-43c2-905b-fe699ed9a46a)/DataModelRoles

 

You would use the /DataModelRoleAssignments endpoint

eg.

http://localhost/reports/api/v2.0/PowerBIReports(1fe72f5d-5cce-43c2-905b-fe699ed9a46a)/DataModelRoleAssignments

 

You would do a GET request to get the all the current users in your RLS roles, then you would post back a new array with any new users added (or remove users who should no longer have access). Note that this array will replace the entire list of users.

 

The following would add user1 and user2 to a specific role.

 

[
    {
        "GroupUserName": "user1",
        "DataModelRoles": [
            "ef5680de-2218-4c40-b308-831ce3d108b4"
        ]
    },
    {
        "GroupUserName": "user2",
        "DataModelRoles": [
            "ef5680de-2218-4c40-b308-831ce3d108b4"
        ]
    }
]

View solution in original post

Power BI Report Server uses Windows Authentication by default. I know in PowerShell you can just use the -UseDefaultCredentials switch of the Invoke-RestMethod cmdlet to send the windows credentials. You will have to search for something like "python rest api windows authentication" in google or bing for information on how to do this in Python - it probably depends on what rest module you are using.

View solution in original post

Thanks a lot.

 

I found the python way. I'd like to share the pkg and code with everyone.

 

import json
import requests
from requests_ntlm import HttpNtlmAuth
 
url = ''
data = []
oauth = HttpNtlmAuth('domain\\account','pwd')
r = requests.put(url, data=json.dumps(data), auth=oauth)
print (r.text)
 

View solution in original post

9 REPLIES 9
d_gosbell
Super User
Super User

If you mean can you add users to an RLS role you defined in the pbix file, then the answer is yes,

 

You can get a list of the roles in a specified report with a call like

http://localhost/reports/api/v2.0/PowerBIReports(1fe72f5d-5cce-43c2-905b-fe699ed9a46a)/DataModelRoles

 

You would use the /DataModelRoleAssignments endpoint

eg.

http://localhost/reports/api/v2.0/PowerBIReports(1fe72f5d-5cce-43c2-905b-fe699ed9a46a)/DataModelRoleAssignments

 

You would do a GET request to get the all the current users in your RLS roles, then you would post back a new array with any new users added (or remove users who should no longer have access). Note that this array will replace the entire list of users.

 

The following would add user1 and user2 to a specific role.

 

[
    {
        "GroupUserName": "user1",
        "DataModelRoles": [
            "ef5680de-2218-4c40-b308-831ce3d108b4"
        ]
    },
    {
        "GroupUserName": "user2",
        "DataModelRoles": [
            "ef5680de-2218-4c40-b308-831ce3d108b4"
        ]
    }
]

Hi @d_gosbell ,

 

I am not able to make it work, do you know if the API was deleted? 


Thanks.


@melanid wrote:

I am not able to make it work, do you know if the API was deleted? 

 


No, It's definitely still there as a documented API. What do you mean by "not able to make it work" - are you getting an error message of some sort? If so can you share more about what you are attempting to do and what error you are getting?

Hi,


Thanks for your response! 

I tried to use it like you describe (I want to retrieve the list of configured RLS for a specific dataset) : http://localhost/reports/api/v2.0/PowerBIReports(DATASETID)/DataModelRoles 

But in my case, we have PowerBI Pro Licences, does it only work with on-premise licences?  

 

Thanks


@melanid wrote:

does it only work with on-premise licences?  


Yes, this forum is dedicated to the on-prem Report Server. 

 

The only way to update RLS on the service using an API is via the XMLA endpoint and you need a premium license for that.

Can we do this by using Power shell cmdlets directly without using powerbi REST API?

Thanks a lot.

 

I can use chrome to get the response.

 

But when I try to use python requests to get, I met 401, I guess it was unauthorized.

Do you know how can I pass my account and pwd via Rest API?

Power BI Report Server uses Windows Authentication by default. I know in PowerShell you can just use the -UseDefaultCredentials switch of the Invoke-RestMethod cmdlet to send the windows credentials. You will have to search for something like "python rest api windows authentication" in google or bing for information on how to do this in Python - it probably depends on what rest module you are using.

Thanks a lot.

 

I found the python way. I'd like to share the pkg and code with everyone.

 

import json
import requests
from requests_ntlm import HttpNtlmAuth
 
url = ''
data = []
oauth = HttpNtlmAuth('domain\\account','pwd')
r = requests.put(url, data=json.dumps(data), auth=oauth)
print (r.text)
 

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.