Skip to content

Permission update - Bad Request Error #1570

@zrayadh

Description

@zrayadh

When migrating from Tableau Server to Tableau Cloud, calling
server.workbooks.update_permissions(target_workbook, PermissionRules)
results in a 400 Bad Request error. The error message indicates that the request body is missing, even though the request payload is properly formatted.


Versions

  • Tableau Cloud API version: 3.24
  • Python version: 3.12
  • TSC library version: 0.36

Sample Code

import tableauserverclient as TSC
from credentials import Credentials
from tableauserverclient.models.reference_item import ResourceReference

SITE = "mySite"
API_TIMEOUT = 120
WORKBOOK_ID = "myWorkbookId"
GROUP_ID = "myGroupId"

tableau_auth = TSC.PersonalAccessTokenAuth(
    Credentials.Tableau.token_name, Credentials.Tableau.token, SITE
)
server = TSC.Server(Credentials.Tableau.server, use_server_version=True)
server.add_http_options({"timeout": API_TIMEOUT, "verify": False})
server.auth.sign_in(tableau_auth)

target_workbook = server.workbooks.get_by_id(WORKBOOK_ID)

capabilities = {
    TSC.Permission.Capability.Read: TSC.Permission.Mode.Allow,
    TSC.Permission.Capability.Filter: TSC.Permission.Mode.Allow,
    TSC.Permission.Capability.ViewComments: TSC.Permission.Mode.Allow,
    TSC.Permission.Capability.AddComment: TSC.Permission.Mode.Allow,
    TSC.Permission.Capability.ExportImage: TSC.Permission.Mode.Allow,
    TSC.Permission.Capability.ExportData: TSC.Permission.Mode.Allow,
}

permission = [
    TSC.PermissionsRule(
        grantee=ResourceReference(id_=GROUP_ID, tag_name="group"),
        capabilities=capabilities,
    )
]

server.workbooks.update_permissions(target_workbook, permission)

Request Payload
PUT /api/3.24/sites/{siteId}/workbooks/{workbookId}/permissions

{
  "timeout": 120,
  "verify": False,
  "headers": {
    "x-tableau-auth": "{token}",
    "content-type": "text/xml",
    "User-Agent": "Tableau Server Client/0.36"
  },
  "data": b"<tsRequest><permissions><granteeCapabilities>
            <group id={groupId} />
            <capabilities>
              <capability name='Read' mode='Allow' />
              <capability name='Filter' mode='Allow' />
              <capability name='ViewComments' mode='Allow' />
              <capability name='AddComment' mode='Allow' />
              <capability name='ExportImage' mode='Allow' />
              <capability name='ExportData' mode='Allow' />
            </capabilities>
           </granteeCapabilities></permissions></tsRequest>"
}

Results
400000: Bad Request
Required request body is missing: public com.tableausoftware.api.rest.IRestApiResponse
com.tableausoftware.api.rest.permissions.RestApiPermissionsController.addWorkbookPermissions
(com.tableausoftware.api.rest.util.RestApiVersion,com.tableausoftware.domain.user.IAuthenticatedUser,
java.lang.String,com.tableausoftware.api.rest.viewmodels.TsRequest,javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse) throws java.lang.Exception

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions