我正在使用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/