首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SpListItem中通过roleDefinition删除组

从SpListItem中通过roleDefinition删除组
EN

Stack Overflow用户
提问于 2016-11-21 12:39:06
回答 1查看 219关注 0票数 0

我试图删除所有具有特殊RoleDefinition的组。

代码语言:javascript
复制
SPGroupCollection s = item.RoleAssignments.Groups;

SPGroup group = properties.Web.SiteGroups[grp];
SPRoleDefinition definition = item.Web.RoleDefinitions[(int)SPRoleType.Reader];
foreach (SPGroup removeGroup in s)
{
    bool removethisGroup = false;
    SPRoleAssignment removerole = new SPRoleAssignment(removeGroup);
    if (removerole.Member is SPGroup)
    { 
        foreach (SPRoleDefinition rdb in removerole.RoleDefinitionBindings)
        {
            if (rdb == "Read")
            {
                removethisGroup = true;
            }
        }
    }
    if (removethisGroup)
    {
        item.RoleAssignments.RemoveById(removeGroup.ID);
    }
}

经过大量的尝试和搜索,我有点被困住了。我需要删除roleDefinition“读”的所有组

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-21 14:55:29

我找到了答案。这个解决方案对我来说是最有效的。

代码语言:javascript
复制
SPGroup group = properties.Web.SiteGroups[grp];

SPRoleDefinition definition = item.Web.RoleDefinitions.GetByType(SPRoleType.Reader);

SPRoleAssignmentCollection roles = item.RoleAssignments;

for (int i = 0; i < roles.Count; i++)
{
    bool removeThisRole = false;
    SPRoleDefinitionBindingCollection rbc = roles[i].RoleDefinitionBindings;
    foreach (SPRoleDefinition rdef in rbc)
    {
        if (rdef.Type == SPRoleType.Reader)
            removeThisRole = true;
    }

    if (removeThisRole)
    {
        if (!item.HasUniqueRoleAssignments) // required to make role change
            item.BreakRoleInheritance(true);

        item.RoleAssignments.Remove(i);
        item.Update();
        removeThisRole = false;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40720419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档