AL/Test-TablePermissionsExist.ps1
function Test-TablePermissionsExist { param ( # Source path of app code [Parameter(Mandatory=$false)] [string] $SourcePath = (Get-Location), # Do not throw an error if a table permission is found to be missing [Parameter(Mandatory=$false)] [switch] $SuppressError ) $Tables = Get-ChildItem $SourcePath -Recurse -Filter '*.al' | Where-Object {(Get-Content $_.FullName).Item(0).StartsWith('table ')} | Where-Object {(Split-Path (Split-Path $_.FullName -Parent) -Leaf) -ne 'Tests'} if ($null -eq $Tables) { return $true } $PermissionFile = (Get-ChildItem $SourcePath -Recurse -Filter '*.xml' | Where-Object {(Get-Content $_.FullName -Raw).Contains('PermissionSets')}).FullName if ($null -eq $PermissionFile) { throw "Permissions file not found" } [xml]$PermissionsContent = Get-Content $PermissionFile foreach ($Table in $Tables) { $TableID = (Get-Content $Table.FullName).Item(0) $TableID = $TableID.Substring(6,$TableID.IndexOf(' ',7) - 6) if (($PermissionsContent.SelectNodes("PermissionSets/PermissionSet/Permission[ObjectType='0' and ObjectID='{0}']" -f $TableID)).Count -eq 0) { if ($SuppressError.IsPresent) { return $false } else { throw "Permission for table $TableID could not be found in permission file {0}" -f $PermissionFile } } } return $true } Export-ModuleMember -Function Test-TablePermissionsExist |