【问题标题】:Cannot add a role assignment with empty role definition binding collection无法添加具有空角色定义绑定集合的角色分配
【发布时间】:2017-09-11 22:53:21
【问题描述】:

我正在尝试向使用 SharePoint 2013 中的 ClientContext 的用户授予权限。我所做的一切都与 Microsoft 网站 http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.roledefinitionbindingcollection.add.aspx 中的完全相同

但是最后这部分代码总是返回异常“Cannot add a role assignment with empty role definition binding collection”:

RoleAssignment oRoleAssignment = w.RoleAssignments.Add(oUser, roleDefBinding);                            
clientContext.ExecuteQuery();

我搜索了网页,发现其他一些用户有类似的问题,但没有回应。 有什么想法吗?

我的代码:

clientContext.Load(w.RoleDefinitions);
clientContext.ExecuteQuery();
var role = w.RoleDefinitions.Where(r => r.Name == roleName);
if (role.Count() > 0)
{
       RoleDefinition roleMSP = role.First();
       clientContext.Load(w.SiteUsers);
       clientContext.ExecuteQuery();
       var user = w.SiteUsers.Where(u=> u.LoginName == "c:0+.w|s-1-5-21-3493872076-3631449775-1555872641-1347");
       if (user.Count() > 0)
       {
             // Create a new RoleDefinitionBindingCollection object.
             RoleDefinitionBindingCollection roleDefBinding = new RoleDefinitionBindingCollection(clientContext);
             roleDefBinding.Add(roleMSP);
             User oUser = user.First() as User;

             clientContext.Load(w.RoleAssignments);
             clientContext.ExecuteQuery();

             RoleAssignment oRoleAssignment = w.RoleAssignments.Add(oUser, roleDefBinding);                            
             clientContext.ExecuteQuery();//Here I get an exception
        }
}

【问题讨论】:

    标签: c# sharepoint sharepoint-2013


    【解决方案1】:

    解决了! 删除了以下代码行:

    clientContext.Load(w.RoleAssignments);
    clientContext.ExecuteQuery();
    

    看起来您不需要检索分配列表,然后添加您的。

    【讨论】:

      【解决方案2】:

      我的工作代码:

       RoleDefinitionCollection roleDefs = web.RoleDefinitions;
       var query = projectCtx.LoadQuery(roleDefs.Where(p => p.RoleTypeKind == RoleType.Contributor));
       projectCtx.ExecuteQuery();
       RoleDefinition roledefObj = query.FirstOrDefault();
      
       RoleDefinitionBindingCollection collRoleDefinitionBinding = new RoleDefinitionBindingCollection(projectCtx) { roledefObj };
       var roleAssignments = web.RoleAssignments;
       roleAssignments.Add(principalTest, collRoleDefinitionBinding);
      
       projectCtx.ExecuteQuery();
      

      【讨论】:

        猜你喜欢
        • 2020-11-20
        • 2021-05-25
        • 1970-01-01
        • 2020-04-03
        • 2021-08-10
        • 2012-01-14
        • 2015-07-16
        • 1970-01-01
        • 2019-06-26
        相关资源
        最近更新 更多