使用 PowerShell 将 RoleAssignment 成员添加到 SPItem

Add RoleAssignment Member to SPItem Using PowerShell

我将执行一个脚本来删除 SPitem 的权限。但是,需要一个回滚计划,我需要创建一个单独的脚本,如果需要,它将把用户的权限添加回 SPitem

下面是我的代码片段,它从 SPitem:

中删除了一个用户
ForEach ($RDfolderId in $RDfolderSplit)
{
    $query = New-Object Microsoft.SharePoint.SPQuery
    $query.ViewXml = "@<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='Title' /><Value Type='Text'>$RDfolderId</Value></Eq></Where></Query></View>"

    $RDfolder = $RDlist.GetItems($query)

    foreach($role in $RDfolder.RoleAssignments)  
    {
        if ($role.Member.Name.Equals($userToAction))
        {
            #$RDitem.BreakRoleInheritance($true)
            #$RDitem.RoleAssignments.RemoveById($roleAssignment.Member.ID)
            #$RDitem.Update()
        }
    }
}

我在网上看到了将 roles 添加回 SPitem 的代码示例。但是,声明了一个附加字段 RoleDefinitions

将用户添加到 SPitem 时是否必须声明值?

下面是添加的代码示例:

$web = Get-SPWeb http://sp-2010
$account = $web.EnsureUser("SHAREPOINT\mray")
$role = $web.RoleDefinitions["Contribute"] #is this value compulsory?

$list = $web.Lists["Shared Documents"]

$list.BreakRoleInheritance($true)

$assignment = New-Object Microsoft.SharePoint.SPRoleAssignment($account)
$assignment.RoleDefinitionBindings.Add($role)
$list.RoleAssignments.Add($assignment)

$list.Update()
$web.Dispose()

source

简答 - 是。

让我们分解这个示例并解释每个部分:

$web = Get-SPWeb http://sp-2010

$web - SharePoint Web 对象又名。我们正在处理的站点。

$account = $web.EnsureUser("SHAREPOINT\mray")

$account - 我们正在使用的用户帐户。

$role = $web.RoleDefinitions["Contribute"] #is this value compulsory?

$role - 这是角色定义,也就是权限,如 Contribute/Read/Approve。是的。这是强制性的,因为它是您要添加回来的权限。

$list = $web.Lists["Shared Documents"]

$list - 我们正在使用的列表。

$list.BreakRoleInheritance($true)

BreakRoleInheritance - 这是如果我们需要对列表的独特权限并关闭继承。我们不必每次都这样做,在这个例子中,您可能不必破坏继承。

现在,我们进入权限部分。

$assignment = New-Object Microsoft.SharePoint.SPRoleAssignment($account)

$assignment - 首先,我们需要获取所有 SharePoint 角色 当前 分配给我们的 用户 .

$assignment.RoleDefinitionBindings.Add($role)

Add($role) - 添加角色定义,即 "Contribute" 到 user 对象。这对 SharePoint 上的列表没有任何作用。

$list.RoleAssignments.Add($assignment)

Add($assignment) - 将具有新权限的 user 添加到 List 对象。这对 SharePoint 上的列表没有任何作用。我们正在操纵我们想要的列表的结束状态。

$list.Update()

Update - 现在在 SharePoint 上做一些事情。将我们对 List 对象所做的更改实际应用到 SharePoint。

$web.Dispose()

Dispose - 清理我们的对象。


现在。说了这么多。这是设置权限的好脚本。您还有一个用于删除权限的脚本。回滚脚本的要点是您需要记录这些权限最初是什么 在您删除它们之前。即一旦你删除它们,就没有神奇的撤消按钮。 ;-)