Forum Discussion

annafan's avatar
annafan
Frequent Visitor
6 years ago
Solved

Can I update Row-level security via Rest API?

Can I update Row-level security via Rest API?

How can I do that?

  • 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"
            ]
        }
    ]
  • 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.

  • annafan's avatar
    annafan
    6 years ago

    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)
     

12 Replies

  • 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"
            ]
        }
    ]
    • kshukla6's avatar
      kshukla6
      Frequent Visitor

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

    • annafan's avatar
      annafan
      Frequent Visitor

      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?

      • d_gosbell's avatar
        d_gosbell
        Super User

        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.

    • melanid's avatar
      melanid
      Frequent Visitor

      Hi d_gosbell ,

       

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


      Thanks.

      • d_gosbell's avatar
        d_gosbell
        Super User

        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?