SharePoint Online: PowerShell Kullanarak Öğeyi Listelemek İçin İzin Verme


SharePoint'te izinler, En İyi Site koleksiyonundan Liste Öğesi düzeyine kadar hiyerarşiktir. Öğeler bir listede veya kitaplıkta oluşturulduğunda, o listenin veya kitaplığın izinlerini devralır. Ancak bu miras bozulabilir ve izinler doğrudan öğelere uygulanabilir. Liste öğelerine benzersiz izinler ayarlamak için izinleri öğe düzeyinde yapılandırmanız gerekir. İşte nasıl:

SharePoint Online'da Bireysel Liste Öğelerine Erişim Nasıl Verilir?

Liste öğesi düzeyinde izin verme konusunda bir iş gereksinimimiz var. SharePoint Online liste öğelerinde açık izinler ayarlamak için önce izin mirasını kesmemiz (izinleri devralmayı durdurmamız) ve ardından Liste Öğesine bir kullanıcı veya grup eklememiz gerekir.

  1. SharePoint Online listenize veya kitaplığınıza gidin >> Benzersiz izinler sağlamak istediğiniz öğeyi seçin.
  2. Bilgi panelinden “Erişimi yönet” bağlantısını tıklayın. Erişimi yönet sayfasında “Gelişmiş” bağlantısını tıklayın.

  3. İzinler sekmesinin Devralma grubunda İzinleri Devralmayı Durdur düğmesini tıklayın. İstemi onaylayın.

  4. Şimdi “İzin Ver” seçeneğini tıklayın. şeritteki düğmeye basın. Paylaş iletişim kutusunda adları ve e-posta adreslerini girin. Seçenekleri Göster düğmesini tıklayın. Bir İzin Düzeyi Seçin liste kutusunda, Düzenle gibi uygun izin düzeyini seçin.

  5. Paylaş'ı tıklayın.

Çok fazla Öğe düzeyinde izne sahip olmak çoğu zaman performans sorunlarına yol açar! yani dikkatli ol.

SharePoint Online: PowerShell'i kullanarak Liste Öğesi İzinlerini Ayarlayın:

SharePoint Online için öğe düzeyinde izin nasıl verilir? İşte SharePoint Online'da izin vermek için PowerShell'im.


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

Function Set-ListItemPermission
{
    param
    (   
        [Parameter(Mandatory=$true)] [string]$SiteURL,
        [Parameter(Mandatory=$true)] [string]$ListName,
        [Parameter(Mandatory=$true)] [string]$ItemID,
        [Parameter(Mandatory=$true)] [string]$PermissionLevel,
        [Parameter(Mandatory=$true)] [string]$UserID
    )
    Try {
        #Setup Credentials to connect
        $Cred= Get-Credential
        $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials
        
        #Get the List and Item
        $List = $Ctx.Web.Lists.GetByTitle($ListName)
        $ListItem=$List.GetItemByID($ItemID)
        $Ctx.Load($List)
        $Ctx.Load($ListItem)
        $Ctx.ExecuteQuery()

        #Check if Item has unique permission already
        $list.Retrieve("HasUniqueRoleAssignments")
        $Ctx.ExecuteQuery()

        #Break Item's permission Inheritance, if its inheriting permissions from the parent
        if (-not $ListItem.HasUniqueRoleAssignments)
        {
            $ListItem.BreakRoleInheritance($false, $false) #keep the existing permissions: No -  Clear listitems permissions: No
            $ctx.ExecuteQuery()
        }

        #Get the User
        $User = $Ctx.Web.EnsureUser($UserID)
        $Ctx.load($User)
        $Ctx.ExecuteQuery()

        #Get the role 
        $Role = $Ctx.web.RoleDefinitions.GetByName($PermissionLevel)
        $RoleDB = New-Object Microsoft.SharePoint.Client.RoleDefinitionBindingCollection($Ctx)
        $RoleDB.Add($Role)
         
        #Assign permissions
        $UserPermissions = $ListItem.RoleAssignments.Add($User,$RoleDB)
        $ListItem.Update()
        $Ctx.ExecuteQuery()
    
        Write-host -f Green "Permission granted to List Item successfully!"
    }
    Catch {
        Write-host -f Red "Error granting permission to List Item!" $_.Exception.Message
    }
}

#Set parameter values
$SiteURL="https://crescent.sharepoint.com"
$ListName="Projects"
$ItemID="1"
$UserID="salaudeen@crescent.com"
$PermissionLevel="Edit"

#Call the function
Set-ListItemPermission -SiteURL $SiteURL -ListName $ListName -ItemID $ItemID -UserID $UserID -PermissionLevel $PermissionLevel 

Bu komut dosyası, belirli bir kullanıcı için Öğe düzeyinde izin verir. SharePoint Grubuna izin vermek istiyorsanız satır yerine


$User = $Web.EnsureUser($UserAccount)
#use:
$Group =$Web.SiteGroups.GetByName($GroupName)
#and then
$GroupPermissions = $Item.RoleAssignments.Add($Group,$RoleDB)

Öğe Düzeyinde İzni Ayarlamak İçin PnP PowerShell

PowerShell kullanarak SharePoint Online'daki liste öğelerinin iznini değiştirmek için şunu kullanın: Set-PnPListItemPermission cmdlet'i.


#Config Variables
$SiteURL = "https://Crescent.sharepoint.com/sites/Marketing"
$ListName ="Projects"
$ListItemID ="1"
$GroupName="Marketing Members"
$UserID="Peter@TheCrescentTech.com"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)

#Get the Group
$Group = Get-PnPGroup | where-Object {$_.Title -eq $GroupName}

#Grant permission to Group - Remove all existing permissions
Set-PnPListItemPermission -Identity $ListItemID -List $ListName -AddRole "Read" -Group $Group -ClearExisting

#Grant permission to User
Set-PnPListItemPermission -Identity $ListItemID -List $ListName -AddRole "Edit" -User $UserID

Get-PnPRoleDefinition cmdlet'ini kullanarak eklemek veya kaldırmak için mevcut tüm izinleri alabilirsiniz. SharePoint Online'da olduğu gibi tüm liste öğelerine izin verebiliriz: PowerShell Kullanarak Listedeki Tüm Öğelere İzin Verme

İlgili makaleler