Метод Resource.ReadResourceAuthorization
Получение сведений о авторизации указанного ресурса.
Пространство имен: WebSvcResource
Сборка: ProjectServerServices (в ProjectServerServices.dll)
Синтаксис
'Декларация
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Resource/ReadResourceAuthorization", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Resource/", _
ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Resource/", _
Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Function ReadResourceAuthorization ( _
resourceUid As Guid _
) As ResourceAuthorizationDataSet
'Применение
Dim instance As Resource
Dim resourceUid As Guid
Dim returnValue As ResourceAuthorizationDataSet
returnValue = instance.ReadResourceAuthorization(resourceUid)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Resource/ReadResourceAuthorization", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Resource/",
ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Resource/",
Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public ResourceAuthorizationDataSet ReadResourceAuthorization(
Guid resourceUid
)
Параметры
resourceUid
Тип: System.GuidУникальный идентификатор ресурса для чтения.
Возвращаемое значение
Тип: WebSvcResource.ResourceAuthorizationDataSet
ResourceAuthorizationDataSet содержит разрешения, групп и прочие сведения авторизации.
Замечания
Возвращаются разрешения, — это списки, которые назначаются непосредственно к ресурсу. Все разрешения, назначенные групп, членом которых является ресурса, не включаются.
Дополнительные сведения о разрешениях, возвращенный методом ReadResourceAuthorizationPermissionDataSetсм.
Разрешения Project Server
Разрешение |
Описание |
---|---|
Позволяет пользователю управлять ресурсами, пользователи и группы. Разрешение категории. |
Примеры
В этом примере обновляется прав текущего пользователя и считывает разрешения для текущего пользователя.
В этом примере создается пользовательское разрешение. Прежде чем можно запускать в этом примере два раза, необходимо удалить разрешение, которые он создает. Чтобы вручную удалить ресурсы, перейдите в раздел Центр ресурсов для узла Project Web App, выберите свою учетную запись выберите и выберите пункт Изменить сведения в меню действия. Перейдите в раздел Глобальные разрешения и снимите флажок рядом с пунктом разрешение Новый проект и выберите команду Сохранить.
Please see Необходимые условия для образцов кода на основе ASMX в Project 2013 for critical information on running this code sample.
using System;
using System.Collections.Generic;
using System.Text;
using PSLibrary=Microsoft.Office.Project.Server.Library;
using System.Net;
using System.Data;
using System.Web.Services.Protocols;
using System.Windows.Forms;
namespace Microsoft.SDK.Project.Samples.SetResourceAuthorization
{
class Program
{
[STAThread]
static void Main()
{
try
{
const string PROJECT_SERVER_URI = "https://ServerName/ProjectServerName/";
const string RESOURCE_SERVICE_PATH = "_vti_bin/psi/resource.asmx";
// Set up the Web service objects
SvcResource.Resource resourceSvc = new SvcResource.Resource();
resourceSvc.Url = PROJECT_SERVER_URI + RESOURCE_SERVICE_PATH;
resourceSvc.Credentials = CredentialCache.DefaultCredentials;
// Update your own permissions
Guid resourceUid = resourceSvc.GetCurrentUserUid();
// Read the current permissions
SvcResource.ResourceAuthorizationDataSet authDS = resourceSvc.ReadResourceAuthorization(resourceUid);
Console.WriteLine("Before: ");
WriteTablesToConsole(authDS.Tables);
// add the custom permission
SvcResource.ResourceAuthorizationDataSet.GlobalPermissionsRow globalPermissionsRow = authDS.GlobalPermissions.NewGlobalPermissionsRow();
globalPermissionsRow.RES_UID = resourceUid;
globalPermissionsRow.WSEC_ALLOW = true;
globalPermissionsRow.WSEC_DENY = false;
globalPermissionsRow.WSEC_FEA_ACT_UID = PSLibrary.PSSecurityGlobalPermission.NewProject;
authDS.GlobalPermissions.AddGlobalPermissionsRow(globalPermissionsRow);
resourceSvc.SetResourceAuthorization(authDS);
// Read the permissions again to see the results
authDS = resourceSvc.ReadResourceAuthorization(resourceUid);
Console.WriteLine("After: ");
WriteTablesToConsole(authDS.Tables);
}
catch (SoapException ex)
{
PSLibrary.PSClientError error = new PSLibrary.PSClientError(ex);
PSLibrary.PSErrorInfo[] errors = error.GetAllErrors();
string errMess = "==============================\r\nError: \r\n";
for (int i = 0; i < errors.Length; i++)
{
errMess += "\n" + ex.Message.ToString() + "\r\n";
errMess += "".PadRight(30, '=') + "\r\nPSCLientError Output:\r\n \r\n";
errMess += errors[i].ErrId.ToString() + "\n";
for (int j = 0; j < errors[i].ErrorAttributes.Length; j++)
{
errMess += "\r\n\t" + errors[i].ErrorAttributeNames()[j] + ": " + errors[i].ErrorAttributes[j];
}
errMess += "\r\n".PadRight(30, '=');
}
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(errMess);
}
catch (WebException ex)
{
string errMess = ex.Message.ToString() +
"\n\nLog on, or check the Project Server Queuing Service";
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Error: " + errMess);
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Error: " + ex.Message);
}
finally
{
Console.ResetColor();
Console.WriteLine("\r\n\r\nPress any key...");
Console.ReadKey();
}
}
// Writes all table contents to the console in a
// relatively readable way
private static void WriteTablesToConsole(System.Data.DataTableCollection theTables)
{
Console.ForegroundColor = ConsoleColor.DarkGreen;
foreach (System.Data.DataTable table in theTables)
{
int[] columnWidths = new int[table.Columns.Count];
int tableWidth = 0;
string dataString;
Console.WriteLine("Table: " + table.TableName);
// Write out the column names and get their spacing
StringBuilder tableRow = new StringBuilder();
for (int i = 0; i < table.Columns.Count; i++)
{
columnWidths[i] = GetColumnWidth(table.Columns[i]);
tableRow.Append(table.Columns[i].ColumnName.PadRight(columnWidths[i]));
tableWidth += columnWidths[i];
}
// add a space so it won't wrap
tableWidth += 1;
// make the console as wide as the widest table
Console.BufferWidth = (Console.BufferWidth > tableWidth ? Console.BufferWidth : tableWidth);
tableRow.Append("\r\n");
Console.Write(tableRow.ToString());
// Write out the data
foreach (DataRow row in table.Rows)
{
tableRow = new StringBuilder();
for (int i = 0; i < table.Columns.Count; i++)
{
dataString = row[i].ToString();
// truncate output if it is wider than
// the desired column width
if (dataString.Length >= columnWidths[i])
{
dataString = dataString.Substring(0, columnWidths[i] - 1);
}
// add the output to the stringbuilder and pad right to fill
// up to the column width.
tableRow.Append(dataString.PadRight(columnWidths[i]));
}
tableRow.Append("\r\n");
Console.Write(tableRow.ToString());
}
Console.Write("\r\n".PadLeft(tableWidth, '-'));
}
Console.ResetColor();
}
// Helper function for WriteTablesToConsole
private static int GetColumnWidth(DataColumn column)
{
// Note: may not handle byte[]data types well
const int MAX_COL_WIDTH = 40;
int dataWidth = 0;
//return 12 for numbers, 30 for dates, and string width for strings.
switch (column.DataType.UnderlyingSystemType.ToString())
{
case "System.Boolean":
case "System.Byte":
case "System.Byte[]":
case "System.Char":
case "System.Decimal":
case "System.Double":
case "System.Int16":
case "System.Int32":
case "System.Int64":
case "System.SByte":
case "System.Single":
case "System.UInt16":
case "System.UInt32":
case "System.UInt64":
dataWidth = 12;
break;
case "System.DateTime":
case "System.TimeSpan":
dataWidth = 30;
break;
case "System.Guid":
dataWidth = 37;
break;
case "System.String":
// If it has a maxlength, use it
if (column.MaxLength > 0)
{
dataWidth = column.MaxLength;
}
else
{
// Otherwise use the max col width
dataWidth = MAX_COL_WIDTH;
}
break;
default:
dataWidth = column.ColumnName.Length;
break;
}
// truncate if over the max length
if (dataWidth > MAX_COL_WIDTH)
{
dataWidth = MAX_COL_WIDTH;
}
// always be at least as wide as the colum name
return (column.ColumnName.Length > (dataWidth) ? column.ColumnName.Length + 1 : dataWidth);
}
}
}