/// <summary> /// <see cref="ITableauPermissionService.AddDefaultPermissionAsync"/> /// </summary> public async Task <TableauPermission> AddDefaultPermissionAsync( string projectId, ResourceType resourceType, TableauPermission permission ) { _logger?.Debug($"Adding default {resourceType.ToString().ToLower()} permission for project {projectId}"); foreach (var granteeCapability in permission.GranteeCapabilities) { var granteeTypeName = ""; var granteeId = ""; if (granteeCapability.Group != null) { granteeTypeName = GranteeType.Group.ToString().ToLower(); granteeId = granteeCapability.Group.Id; } else if (granteeCapability.User != null) { granteeTypeName = GranteeType.User.ToString().ToLower(); granteeId = granteeCapability.User.Id; } else { throw new Exception("Unsupported grantee type"); } foreach (var capability in granteeCapability.Capabilities.Capability) { _logger?.Debug( String.Format( "Adding default {0} permission on {1} for {2} {3}: {4} {5}", resourceType.ToString().ToLower(), projectId, granteeTypeName, granteeId, capability.Mode, capability.Name ) ); } } var url = _tableauApiService.SiteUrl.AppendUri( $"projects/{projectId}/default-permissions/{resourceType.ToString().ToLower()}s/" ); var requestJson = new JObject(); requestJson["permissions"] = JToken.Parse(permission.ToRequestString()); var responseString = await _tableauApiService.SendPutAsync( url, requestJson.ToString() ).ConfigureAwait(false); var responseJson = JToken.Parse(responseString); var newPermission = JsonConvert.DeserializeObject <TableauPermission>( responseJson.Value <JObject>("permissions").ToString() ); _logger?.Debug($"Default permission added"); return(newPermission); }
/// <summary> /// <see cref="ITableauPermissionService.AddPermissionAsync"/> /// </summary> public async Task <TableauPermission> AddPermissionAsync(TableauPermission permission) { _logger?.Debug($"Adding permission"); var resourceTypeName = ""; var resourceId = ""; if (permission.Datasource != null) { resourceTypeName = ResourceType.Datasource.ToString().ToLower(); resourceId = permission.Datasource.Id; } else if (permission.Project != null) { resourceTypeName = ResourceType.Project.ToString().ToLower(); resourceId = permission.Project.Id; } else if (permission.Workbook != null) { resourceTypeName = ResourceType.Workbook.ToString().ToLower(); resourceId = permission.Workbook.Id; } else { throw new Exception("Unsupported resource/object type"); } foreach (var granteeCapability in permission.GranteeCapabilities) { var granteeTypeName = ""; var granteeId = ""; if (granteeCapability.Group != null) { granteeTypeName = GranteeType.Group.ToString().ToLower(); granteeId = granteeCapability.Group.Id; } else if (granteeCapability.User != null) { granteeTypeName = GranteeType.User.ToString().ToLower(); granteeId = granteeCapability.User.Id; } else { throw new Exception("Unsupported grantee type"); } foreach (var capability in granteeCapability.Capabilities.Capability) { _logger?.Debug( String.Format( "Adding permission for {0} {1} to {2} {3}: {4} {5}", resourceTypeName, resourceId, granteeTypeName, granteeId, capability.Mode, capability.Name ) ); } } var url = _tableauApiService.SiteUrl.AppendUri($"{resourceTypeName}s/{resourceId}/permissions"); var requestJson = new JObject(); requestJson["permissions"] = JToken.Parse(permission.ToRequestString()); var responseString = await _tableauApiService.SendPutAsync(url, requestJson.ToString()).ConfigureAwait(false); var responseJson = JToken.Parse(responseString); var newPermission = JsonConvert.DeserializeObject <TableauPermission>( responseJson.Value <JObject>("permissions").ToString() ); _logger?.Debug($"Permission added"); return(newPermission); }