GetUserEffectivePermissions

GetUserEffectivePermissions

我正在使用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)对象不能正确表示给定用户的权限。该对象不是null,但代表用户没有权限。该用户至少具有查看和编辑权限,我可以通过以该用户的身份使用Web浏览器查看/编辑列表项来确认这一点。

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

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


谁能帮助我确定GetUserEffectivePermissions()方法出了什么问题?

最佳答案

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

i:0#.w |域\用户

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

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


当然,这是针对当前用户的,因此您需要首先获取您真正想要的用户。

关于c# - 为什么我的List.GetUserEffectivePermissions()方法不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31598556/

10-12 00:00