为什么我的 List.GetUserEffectivePermissions() 方法不起作用?

Why is my List.GetUserEffectivePermissions() method not working?

我正在使用 SharePoint 2013 客户端对象模型在 C# 中开发流程。我需要检索给定用户的 SharePoint 列表权限,这将不同于执行代码的用户。

using SP = Microsoft.SharePoint.Client;

SP.ClientContext SpContext = new SP.ClientContext("SITEURL");
SP.Web SiteWeb = SpContext.Web;
SP.List Lst = SpContext.Web.Lists.GetByTitle("LIST");
var ClientUserEffPerms = Lst.GetUserEffectivePermissions(@"<domain>\<username>");

SpContext.Load(SiteWeb, S => S.EffectiveBasePermissions);
SpContext.Load(Lst, L => L.EffectiveBasePermissions);
SpContext.ExecuteQuery();

此代码执行后,ClientUserEffPerms.Value (BasePermissions) 对象未正确表示给定用户的权限。该对象不为空,但它表示用户没有权限。该用户至少具有查看和编辑权限,我可以通过 viewing/editing 以该用户身份使用网络浏览器列出项目来确认这一点。

代码执行用户有权在Web 和列表级别枚举权限。我已经用下面的代码确认了这一点,两个布尔值都解析为 true。

bool SvcUserHasSiteEnumPermsPerm = SiteWeb.EffectiveBasePermissions.Has(SP.PermissionKind.EnumeratePermissions);
bool SvcUserHasListEnumPermsPerm = Lst.EffectiveBasePermissions.Has(SP.PermissionKind.EnumeratePermissions);

任何人都可以帮我确定我的 GetUserEffectivePermissions() 方法有什么问题吗?

当您调用 GetUserEffectivePermissions 时,您需要传入登录名的完整声明令牌版本,如下所示:

i:0#.w|domain\user

您可以通过在用户对象上加载 LoginName 属性 来获得此信息:

clientContext.Load(clientContext.Web.CurrentUser, i => i.LoginName);
clientContext.ExecuteQuery();

当然,那是针对当前用户的,所以你需要先获取你真正想要的用户。