Report 9000 Add/Subtract Permission Set, source in 29
Source29
src/Layers/W1/BaseApp/System/Permissions/AddSubtractPermissionSet.Report.al435 lines, Copyright (c) Microsoft Corporation. MIT
namespace System.Security.AccessControl;
using System.Text;
report 9000 "Add/Subtract Permission Set"
{
Caption = 'Add/Subtract Permission Set';
ProcessingOnly = true;
dataset
{
dataitem(SourcePermissionSet; "Aggregate Permission Set")
{
DataItemTableView = sorting(Scope, "App ID", "Role ID") order(ascending);
trigger OnAfterGetRecord()
var
Permission: Record Permission;
TenantPermission: Record "Tenant Permission";
begin
if Scope = Scope::System then begin
Permission.SetRange("Role ID", "Role ID");
if Permission.FindSet() then
repeat
if DestinationAggregatePermissionSet.Scope = DestinationAggregatePermissionSet.Scope::System then
IncludeExcludePermissionInPermission(Permission)
else
IncludeExcludePermission(Permission);
until Permission.Next() = 0;
end else begin
TenantPermission.SetRange("App ID", "App ID");
TenantPermission.SetRange("Role ID", "Role ID");
if TenantPermission.FindSet() then
repeat
if TenantPermission.Type <> TenantPermission.Type::Exclude then // This report does not suppport exclude permissions.
if DestinationAggregatePermissionSet.Scope = DestinationAggregatePermissionSet.Scope::System then
IncludeExcludeTenantPermissionInPermission(TenantPermission)
else
IncludeExcludeTenantPermission(TenantPermission);
until TenantPermission.Next() = 0;
end;
end;
trigger OnPreDataItem()
begin
Copy(DummySourceAggregatePermissionSet);
end;
}
}
requestpage
{
layout
{
area(content)
{
field(DstnAggregatePermissionSet; DestinationAggregatePermissionSet."Role ID")
{
ApplicationArea = Basic, Suite;
Caption = 'Destination';
Editable = false;
TableRelation = "Aggregate Permission Set"."Role ID";
ToolTip = 'Specifies the permission set for which permission sets are included or excluded.';
}
field(SetOperation; SetOperation)
{
ApplicationArea = Basic, Suite;
Caption = 'Operation';
OptionCaption = 'Include,Exclude';
ToolTip = 'Specifies if the batch job includes or excludes a permission set for the destination permission set.';
}
field(SourceAggregatePermissionSet; SelectedRoleIdFilter)
{
ApplicationArea = Basic, Suite;
Caption = 'Source';
Editable = false;
ToolTip = 'Specifies which permission set is included or excluded for the destination permission set.';
trigger OnAssistEdit()
var
SelectionFilterManagement: Codeunit SelectionFilterManagement;
PermissionSetList: Page "Permission Set List";
begin
PermissionSetList.LookupMode := true;
if PermissionSetList.RunModal() = ACTION::LookupOK then begin
PermissionSetList.GetSelectionFilter(DummySourceAggregatePermissionSet);
SelectedRoleIdFilter := SelectionFilterManagement.GetSelectionFilterForAggregatePermissionSetRoleId(DummySourceAggregatePermissionSet);
end;
end;
}
}
}
actions
{
}
}
labels
{
}
trigger OnPreReport()
begin
if DestinationAggregatePermissionSet."Role ID" = '' then
Error(NoDestinationErr);
if not DummySourceAggregatePermissionSet.FindSet() then
Error(NoSourceErr);
repeat
if DestinationAggregatePermissionSet.RecordId = DummySourceAggregatePermissionSet.RecordId then
Error(SameSrcDestnErr);
until DummySourceAggregatePermissionSet.Next() = 0;
end;
var
DestinationAggregatePermissionSet: Record "Aggregate Permission Set";
DummySourceAggregatePermissionSet: Record "Aggregate Permission Set";
SetOperation: Option Include,Exclude;
NoDestinationErr: Label 'No destination permission set has been set.';
NoSourceErr: Label 'You must select a source permission set.';
SameSrcDestnErr: Label 'You cannot select permission set as both source and destination.';
SelectedRoleIdFilter: Text;
procedure SetDestination(NewDestinationAggregatePermissionSet: Record "Aggregate Permission Set")
begin
DestinationAggregatePermissionSet := NewDestinationAggregatePermissionSet;
end;
local procedure PermissionValueIsGreaterOrEqual(Left: Option " ",Yes,Indirect; Right: Option " ",Yes,Indirect): Boolean
begin
// Returns (Left >= Right)
case Left of
Left::" ":
exit(Right = Right::" ");
Left::Yes:
exit(true);
Left::Indirect:
exit(Right <> Right::Yes);
end;
end;
local procedure IncludeExcludePermission(SourcePermission: Record Permission)
var
DestinationTenantPermission: Record "Tenant Permission";
begin
case SetOperation of
SetOperation::Include:
if DestinationTenantPermission.Get(
DestinationAggregatePermissionSet."App ID", DestinationAggregatePermissionSet."Role ID",
SourcePermission."Object Type", SourcePermission."Object ID")
then begin
if PermissionValueIsGreaterOrEqual(SourcePermission."Read Permission", DestinationTenantPermission."Read Permission") then
DestinationTenantPermission."Read Permission" := SourcePermission."Read Permission";
if PermissionValueIsGreaterOrEqual(SourcePermission."Insert Permission", DestinationTenantPermission."Insert Permission") then
DestinationTenantPermission."Insert Permission" := SourcePermission."Insert Permission";
if PermissionValueIsGreaterOrEqual(SourcePermission."Modify Permission", DestinationTenantPermission."Modify Permission") then
DestinationTenantPermission."Modify Permission" := SourcePermission."Modify Permission";
if PermissionValueIsGreaterOrEqual(SourcePermission."Delete Permission", DestinationTenantPermission."Delete Permission") then
DestinationTenantPermission."Delete Permission" := SourcePermission."Delete Permission";
if PermissionValueIsGreaterOrEqual(SourcePermission."Execute Permission", DestinationTenantPermission."Execute Permission") then
DestinationTenantPermission."Execute Permission" := SourcePermission."Execute Permission";
DestinationTenantPermission.Modify();
end else begin
DestinationTenantPermission."Object ID" := SourcePermission."Object ID";
DestinationTenantPermission."Object Type" := SourcePermission."Object Type";
DestinationTenantPermission."Read Permission" := SourcePermission."Read Permission";
DestinationTenantPermission."Insert Permission" := SourcePermission."Insert Permission";
DestinationTenantPermission."Modify Permission" := SourcePermission."Modify Permission";
DestinationTenantPermission."Delete Permission" := SourcePermission."Delete Permission";
DestinationTenantPermission."Execute Permission" := SourcePermission."Execute Permission";
DestinationTenantPermission."Security Filter" := SourcePermission."Security Filter";
DestinationTenantPermission."Role ID" := DestinationAggregatePermissionSet."Role ID";
DestinationTenantPermission."App ID" := DestinationAggregatePermissionSet."App ID";
DestinationTenantPermission.Insert();
end;
SetOperation::Exclude:
begin
DestinationTenantPermission.SetRange("App ID", DestinationAggregatePermissionSet."App ID");
DestinationTenantPermission.SetRange("Role ID", DestinationAggregatePermissionSet."Role ID");
DestinationTenantPermission.SetRange("Object Type", SourcePermission."Object Type");
if SourcePermission."Object ID" <> 0 then
DestinationTenantPermission.SetRange("Object ID", SourcePermission."Object ID");
if DestinationTenantPermission.FindSet() then
repeat
if PermissionValueIsGreaterOrEqual(SourcePermission."Read Permission", DestinationTenantPermission."Read Permission") then
DestinationTenantPermission."Read Permission" := SourcePermission."Read Permission"::" ";
if PermissionValueIsGreaterOrEqual(SourcePermission."Insert Permission", DestinationTenantPermission."Insert Permission") then
DestinationTenantPermission."Insert Permission" := SourcePermission."Insert Permission"::" ";
if PermissionValueIsGreaterOrEqual(SourcePermission."Modify Permission", DestinationTenantPermission."Modify Permission") then
DestinationTenantPermission."Modify Permission" := SourcePermission."Modify Permission"::" ";
if PermissionValueIsGreaterOrEqual(SourcePermission."Delete Permission", DestinationTenantPermission."Delete Permission") then
DestinationTenantPermission."Delete Permission" := SourcePermission."Delete Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourcePermission."Execute Permission", DestinationTenantPermission."Execute Permission")
then
DestinationTenantPermission."Execute Permission" := SourcePermission."Execute Permission"::" ";
DestinationTenantPermission.Modify();
if (DestinationTenantPermission."Read Permission" = SourcePermission."Read Permission"::" ") and
(DestinationTenantPermission."Insert Permission" = SourcePermission."Read Permission"::" ") and
(DestinationTenantPermission."Modify Permission" = SourcePermission."Read Permission"::" ") and
(DestinationTenantPermission."Delete Permission" = SourcePermission."Read Permission"::" ") and
(DestinationTenantPermission."Execute Permission" = SourcePermission."Read Permission"::" ")
then
DestinationTenantPermission.Delete();
until DestinationTenantPermission.Next() = 0;
end;
end;
end;
local procedure IncludeExcludeTenantPermission(SourceTenantPermission: Record "Tenant Permission")
var
DestinationTenantPermission: Record "Tenant Permission";
begin
case SetOperation of
SetOperation::Include:
if DestinationTenantPermission.Get(
DestinationAggregatePermissionSet."App ID", DestinationAggregatePermissionSet."Role ID",
SourceTenantPermission."Object Type", SourceTenantPermission."Object ID")
then begin
if PermissionValueIsGreaterOrEqual(SourceTenantPermission."Read Permission", DestinationTenantPermission."Read Permission") then
DestinationTenantPermission."Read Permission" := SourceTenantPermission."Read Permission";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Insert Permission", DestinationTenantPermission."Insert Permission")
then
DestinationTenantPermission."Insert Permission" := SourceTenantPermission."Insert Permission";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Modify Permission", DestinationTenantPermission."Modify Permission")
then
DestinationTenantPermission."Modify Permission" := SourceTenantPermission."Modify Permission";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Delete Permission", DestinationTenantPermission."Delete Permission")
then
DestinationTenantPermission."Delete Permission" := SourceTenantPermission."Delete Permission";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Execute Permission", DestinationTenantPermission."Execute Permission")
then
DestinationTenantPermission."Execute Permission" := SourceTenantPermission."Execute Permission";
DestinationTenantPermission.Modify();
end else begin
DestinationTenantPermission := SourceTenantPermission;
DestinationTenantPermission."Role ID" := DestinationAggregatePermissionSet."Role ID";
DestinationTenantPermission."App ID" := DestinationAggregatePermissionSet."App ID";
DestinationTenantPermission.Insert();
end;
SetOperation::Exclude:
begin
DestinationTenantPermission.SetRange("App ID", DestinationAggregatePermissionSet."App ID");
DestinationTenantPermission.SetRange("Role ID", DestinationAggregatePermissionSet."Role ID");
DestinationTenantPermission.SetRange("Object Type", SourceTenantPermission."Object Type");
if SourceTenantPermission."Object ID" <> 0 then
DestinationTenantPermission.SetRange("Object ID", SourceTenantPermission."Object ID");
if DestinationTenantPermission.FindSet() then
repeat
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Read Permission", DestinationTenantPermission."Read Permission")
then
DestinationTenantPermission."Read Permission" := SourceTenantPermission."Read Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Insert Permission", DestinationTenantPermission."Insert Permission")
then
DestinationTenantPermission."Insert Permission" := SourceTenantPermission."Insert Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Modify Permission", DestinationTenantPermission."Modify Permission")
then
DestinationTenantPermission."Modify Permission" := SourceTenantPermission."Modify Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Delete Permission", DestinationTenantPermission."Delete Permission")
then
DestinationTenantPermission."Delete Permission" := SourceTenantPermission."Delete Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Execute Permission", DestinationTenantPermission."Execute Permission")
then
DestinationTenantPermission."Execute Permission" := SourceTenantPermission."Execute Permission"::" ";
DestinationTenantPermission.Modify();
if (DestinationTenantPermission."Read Permission" = SourceTenantPermission."Read Permission"::" ") and
(DestinationTenantPermission."Insert Permission" = SourceTenantPermission."Read Permission"::" ") and
(DestinationTenantPermission."Modify Permission" = SourceTenantPermission."Read Permission"::" ") and
(DestinationTenantPermission."Delete Permission" = SourceTenantPermission."Read Permission"::" ") and
(DestinationTenantPermission."Execute Permission" = SourceTenantPermission."Read Permission"::" ")
then
DestinationTenantPermission.Delete();
until DestinationTenantPermission.Next() = 0;
end;
end;
end;
local procedure IncludeExcludePermissionInPermission(SourcePermission: Record Permission)
var
DestinationPermission: Record Permission;
begin
case SetOperation of
SetOperation::Include:
if DestinationPermission.Get(
DestinationAggregatePermissionSet."Role ID", SourcePermission."Object Type", SourcePermission."Object ID")
then begin
if PermissionValueIsGreaterOrEqual(SourcePermission."Read Permission", DestinationPermission."Read Permission") then
DestinationPermission."Read Permission" := SourcePermission."Read Permission";
if PermissionValueIsGreaterOrEqual(SourcePermission."Insert Permission", DestinationPermission."Insert Permission") then
DestinationPermission."Insert Permission" := SourcePermission."Insert Permission";
if PermissionValueIsGreaterOrEqual(SourcePermission."Modify Permission", DestinationPermission."Modify Permission") then
DestinationPermission."Modify Permission" := SourcePermission."Modify Permission";
if PermissionValueIsGreaterOrEqual(SourcePermission."Delete Permission", DestinationPermission."Delete Permission") then
DestinationPermission."Delete Permission" := SourcePermission."Delete Permission";
if PermissionValueIsGreaterOrEqual(SourcePermission."Execute Permission", DestinationPermission."Execute Permission") then
DestinationPermission."Execute Permission" := SourcePermission."Execute Permission";
DestinationPermission.Modify();
end else begin
DestinationPermission."Object ID" := SourcePermission."Object ID";
DestinationPermission."Object Type" := SourcePermission."Object Type";
DestinationPermission."Read Permission" := SourcePermission."Read Permission";
DestinationPermission."Insert Permission" := SourcePermission."Insert Permission";
DestinationPermission."Modify Permission" := SourcePermission."Modify Permission";
DestinationPermission."Delete Permission" := SourcePermission."Delete Permission";
DestinationPermission."Execute Permission" := SourcePermission."Execute Permission";
DestinationPermission."Security Filter" := SourcePermission."Security Filter";
DestinationPermission."Role ID" := DestinationAggregatePermissionSet."Role ID";
DestinationPermission.Insert();
end;
SetOperation::Exclude:
begin
DestinationPermission.SetRange("Role ID", DestinationAggregatePermissionSet."Role ID");
DestinationPermission.SetRange("Object Type", SourcePermission."Object Type");
if SourcePermission."Object ID" <> 0 then
DestinationPermission.SetRange("Object ID", SourcePermission."Object ID");
if DestinationPermission.FindSet() then
repeat
if PermissionValueIsGreaterOrEqual(SourcePermission."Read Permission", DestinationPermission."Read Permission") then
DestinationPermission."Read Permission" := SourcePermission."Read Permission"::" ";
if PermissionValueIsGreaterOrEqual(SourcePermission."Insert Permission", DestinationPermission."Insert Permission") then
DestinationPermission."Insert Permission" := SourcePermission."Insert Permission"::" ";
if PermissionValueIsGreaterOrEqual(SourcePermission."Modify Permission", DestinationPermission."Modify Permission") then
DestinationPermission."Modify Permission" := SourcePermission."Modify Permission"::" ";
if PermissionValueIsGreaterOrEqual(SourcePermission."Delete Permission", DestinationPermission."Delete Permission") then
DestinationPermission."Delete Permission" := SourcePermission."Delete Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourcePermission."Execute Permission", DestinationPermission."Execute Permission")
then
DestinationPermission."Execute Permission" := SourcePermission."Execute Permission"::" ";
DestinationPermission.Modify();
if (DestinationPermission."Read Permission" = SourcePermission."Read Permission"::" ") and
(DestinationPermission."Insert Permission" = SourcePermission."Read Permission"::" ") and
(DestinationPermission."Modify Permission" = SourcePermission."Read Permission"::" ") and
(DestinationPermission."Delete Permission" = SourcePermission."Read Permission"::" ") and
(DestinationPermission."Execute Permission" = SourcePermission."Read Permission"::" ")
then
DestinationPermission.Delete();
until DestinationPermission.Next() = 0;
end;
end;
end;
local procedure IncludeExcludeTenantPermissionInPermission(SourceTenantPermission: Record "Tenant Permission")
var
DestinationPermission: Record Permission;
begin
case SetOperation of
SetOperation::Include:
if DestinationPermission.Get(
DestinationAggregatePermissionSet."Role ID", SourceTenantPermission."Object Type", SourceTenantPermission."Object ID")
then begin
if PermissionValueIsGreaterOrEqual(SourceTenantPermission."Read Permission", DestinationPermission."Read Permission") then
DestinationPermission."Read Permission" := SourceTenantPermission."Read Permission";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Insert Permission", DestinationPermission."Insert Permission")
then
DestinationPermission."Insert Permission" := SourceTenantPermission."Insert Permission";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Modify Permission", DestinationPermission."Modify Permission")
then
DestinationPermission."Modify Permission" := SourceTenantPermission."Modify Permission";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Delete Permission", DestinationPermission."Delete Permission")
then
DestinationPermission."Delete Permission" := SourceTenantPermission."Delete Permission";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Execute Permission", DestinationPermission."Execute Permission")
then
DestinationPermission."Execute Permission" := SourceTenantPermission."Execute Permission";
DestinationPermission.Modify();
end else begin
DestinationPermission."Object ID" := SourceTenantPermission."Object ID";
DestinationPermission."Object Type" := SourceTenantPermission."Object Type";
DestinationPermission."Read Permission" := SourceTenantPermission."Read Permission";
DestinationPermission."Insert Permission" := SourceTenantPermission."Insert Permission";
DestinationPermission."Modify Permission" := SourceTenantPermission."Modify Permission";
DestinationPermission."Delete Permission" := SourceTenantPermission."Delete Permission";
DestinationPermission."Execute Permission" := SourceTenantPermission."Execute Permission";
DestinationPermission."Security Filter" := SourceTenantPermission."Security Filter";
DestinationPermission."Role ID" := DestinationAggregatePermissionSet."Role ID";
DestinationPermission.Insert();
end;
SetOperation::Exclude:
begin
DestinationPermission.SetRange("Role ID", DestinationAggregatePermissionSet."Role ID");
DestinationPermission.SetRange("Object Type", SourceTenantPermission."Object Type");
if SourceTenantPermission."Object ID" <> 0 then
DestinationPermission.SetRange("Object ID", SourceTenantPermission."Object ID");
if DestinationPermission.FindSet() then
repeat
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Read Permission", DestinationPermission."Read Permission")
then
DestinationPermission."Read Permission" := SourceTenantPermission."Read Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Insert Permission", DestinationPermission."Insert Permission")
then
DestinationPermission."Insert Permission" := SourceTenantPermission."Insert Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Modify Permission", DestinationPermission."Modify Permission")
then
DestinationPermission."Modify Permission" := SourceTenantPermission."Modify Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Delete Permission", DestinationPermission."Delete Permission")
then
DestinationPermission."Delete Permission" := SourceTenantPermission."Delete Permission"::" ";
if PermissionValueIsGreaterOrEqual(
SourceTenantPermission."Execute Permission", DestinationPermission."Execute Permission")
then
DestinationPermission."Execute Permission" := SourceTenantPermission."Execute Permission"::" ";
DestinationPermission.Modify();
if (DestinationPermission."Read Permission" = SourceTenantPermission."Read Permission"::" ") and
(DestinationPermission."Insert Permission" = SourceTenantPermission."Read Permission"::" ") and
(DestinationPermission."Modify Permission" = SourceTenantPermission."Read Permission"::" ") and
(DestinationPermission."Delete Permission" = SourceTenantPermission."Read Permission"::" ") and
(DestinationPermission."Execute Permission" = SourceTenantPermission."Read Permission"::" ")
then
DestinationPermission.Delete();
until DestinationPermission.Next() = 0;
end;
end;
end;
}