Как проверить права пользователя в SharePoint 2010 с помощью клиентской объектной модели?

Следующий код всегда возвращает false (что неверно, поскольку у пользователя есть разрешение на полный доступ на уровне сайта):

Site site;
BasePermissions permissionMask;
ClientResult<bool> result;

permissionMask = new BasePermissions();
permissionMask.Set(PermissionKind.ManageWeb);
result = site.DoesUserHavePermissions(permissionMask);

return result.Value;

Я пытаюсь использовать новую клиентскую объектную модель SharePoint 2010. Я был в восторге, когда обнаружил метод DoesUserHavePermissions, но, похоже, я не совсем уверен, знаю ли я, как его использовать. Я понятия не имею, использую ли я правильную маску или мне следует указать учетную запись пользователя, для которой я хочу проверить уровень разрешений? Любая помощь будет принята с благодарностью. Спасибо.


person Boris    schedule 20.04.2010    source источник


Ответы (2)


Не хватало одной важной вещи — клиентского контекста. Этот объект отвечает за фактическое выполнение запроса над любыми объектами клиентской объектной модели SharePoint.

Код следует изменить следующим образом:

ClientContext clientContext;
Site site;
BasePermissions permissionMask;
ClientResult<bool> result;

permissionMask = new BasePermissions();
permissionMask.Set(PermissionKind.ManageWeb);
//if we want to check ManageWeb permission
clientContext = new ClientContext(siteUri);
//siteUri is a method parameter passed as a string
clientContext.Credentials = credential;
//credential is a method parameter passed as a NetworkCredential object
//that is the user for which we are checking the ManageWeb permission
site = clientContext.Web;
result = site.DoesUserHavePermissions(permissionMask);

return result.Value;

Это вернет true, если пользователю назначены разрешения ManageWeb, или false, если нет. Полный список перечислений разрешений см. в этом MSDN. страница.

person Boris    schedule 11.05.2010

Просто подумал, что добавлю код, который я использую для этого. То есть почти то же самое, но без наворотов.

using (var context = new ClientContext(siteUrl))
{
   context.Load(context.Web);
   context.ExecuteQuery();
   BasePermissions permissionMask;
   ClientResult<bool> hasPermissions;
   permissionMask = new BasePermissions();
   permissionMask.Set(PermissionKind.ManageWeb);
   hasPermissions = context.Web.DoesUserHavePermissions(permissionMask);

}
person NathofGod    schedule 09.08.2013