Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }