Page 9874 Permission Set By Sec. Group, source in 29
Source29
src/Layers/W1/BaseApp/System/SecurityGroups/PermissionSetBySecGroup.Page.al438 lines, Copyright (c) Microsoft Corporation. MIT
namespace System.Security.AccessControl;
page 9874 "Permission Set By Sec. Group"
{
ApplicationArea = Basic, Suite;
Caption = 'Permission Set by Security Group';
AboutTitle = 'About Permission Set by Security Group';
AboutText = 'Get an overview of how permission sets are assigned to your security groups. Tip: If you go into analysis mode, you can analyze data in other ways than what you see in the list.';
DeleteAllowed = false;
InsertAllowed = false;
LinksAllowed = false;
ModifyAllowed = false;
UsageCategory = Lists;
PageType = Worksheet;
SourceTable = "Aggregate Permission Set";
layout
{
area(content)
{
repeater(Group)
{
Caption = 'Permission Set';
field("Role ID"; Rec."Role ID")
{
ApplicationArea = Basic, Suite;
Caption = 'Permission Set';
Editable = false;
ToolTip = 'Specifies the permission set.';
}
field(Name; Rec.Name)
{
ApplicationArea = Basic, Suite;
Editable = false;
ToolTip = 'Specifies the name of the record.';
}
field("App ID"; Rec."App ID")
{
ApplicationArea = Basic, Suite;
Caption = 'Extension ID';
ToolTip = 'Specifies the unique identifier for the extension.';
Visible = false;
}
field("App Name"; Rec."App Name")
{
ApplicationArea = Basic, Suite;
Caption = 'Extension Name';
ToolTip = 'Specifies the name of an extension.';
}
field(AllUsersHavePermission; AllGroupsHavePermission)
{
ApplicationArea = Basic, Suite;
Caption = 'All Security Groups';
ToolTip = 'Specifies if the user is a member of all security groups.';
trigger OnValidate()
begin
if AllGroupsHavePermission then
if not Confirm(AllUserGrpGetsPermissionQst) then
Error('');
SetColumnPermission(0, AllGroupsHavePermission);
CurrPage.Update(false);
end;
}
field(Column1; SecurityGroupHasPermissionSet[1])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[1];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 1;
trigger OnValidate()
begin
SetColumnPermission(1, SecurityGroupHasPermissionSet[1]);
end;
}
field(Column2; SecurityGroupHasPermissionSet[2])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[2];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 2;
trigger OnValidate()
begin
SetColumnPermission(2, SecurityGroupHasPermissionSet[2]);
end;
}
field(Column3; SecurityGroupHasPermissionSet[3])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[3];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 3;
trigger OnValidate()
begin
SetColumnPermission(3, SecurityGroupHasPermissionSet[3]);
end;
}
field(Column4; SecurityGroupHasPermissionSet[4])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[4];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 4;
trigger OnValidate()
begin
SetColumnPermission(4, SecurityGroupHasPermissionSet[4]);
end;
}
field(Column5; SecurityGroupHasPermissionSet[5])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[5];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 5;
trigger OnValidate()
begin
SetColumnPermission(5, SecurityGroupHasPermissionSet[5]);
end;
}
field(Column6; SecurityGroupHasPermissionSet[6])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[6];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 6;
trigger OnValidate()
begin
SetColumnPermission(6, SecurityGroupHasPermissionSet[6]);
end;
}
field(Column7; SecurityGroupHasPermissionSet[7])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[7];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 7;
trigger OnValidate()
begin
SetColumnPermission(7, SecurityGroupHasPermissionSet[7]);
end;
}
field(Column8; SecurityGroupHasPermissionSet[8])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[8];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 8;
trigger OnValidate()
begin
SetColumnPermission(8, SecurityGroupHasPermissionSet[8]);
end;
}
field(Column9; SecurityGroupHasPermissionSet[9])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[9];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 9;
trigger OnValidate()
begin
SetColumnPermission(9, SecurityGroupHasPermissionSet[9]);
end;
}
field(Column10; SecurityGroupHasPermissionSet[10])
{
ApplicationArea = All;
CaptionClass = '3,' + SecurityGroupCodeArr[10];
ToolTip = 'Specifies if the user has this permission set.';
Visible = NoOfRecords >= 10;
trigger OnValidate()
begin
SetColumnPermission(10, SecurityGroupHasPermissionSet[10]);
end;
}
}
}
area(factboxes)
{
part(ExpandedPermissions; "Expanded Permissions FactBox")
{
ApplicationArea = Basic, Suite;
Caption = 'Permissions';
Editable = false;
SubPageLink = "Role ID" = field("Role ID"),
"App ID" = field("App ID");
}
}
}
actions
{
area(navigation)
{
action(Permissions)
{
ApplicationArea = Basic, Suite;
Caption = 'Permissions';
Image = Permission;
ToolTip = 'View or edit which feature objects that users need to access and set up the related permissions in permission sets that you can assign to the users of the database.';
trigger OnAction()
var
PermissionSetRelation: Codeunit "Permission Set Relation";
begin
PermissionSetRelation.OpenPermissionSetPage(Rec.Name, Rec."Role ID", Rec."App ID", Rec.Scope);
end;
}
}
area(processing)
{
action(CopyPermissionSet)
{
ApplicationArea = Basic, Suite;
Caption = 'Copy Permission Set';
Ellipsis = true;
Enabled = CanManageUsersOnTenant;
Image = Copy;
ToolTip = 'Create a copy of the selected permission set with a name that you specify.';
trigger OnAction()
var
AggregatePermissionSet: Record "Aggregate Permission Set";
begin
AggregatePermissionSet.SetRange(Scope, Rec.Scope);
AggregatePermissionSet.SetRange("App ID", Rec."App ID");
AggregatePermissionSet.SetRange("Role ID", Rec."Role ID");
Report.RunModal(Report::"Copy Permission Set", true, true, AggregatePermissionSet);
end;
}
action(AllColumnsLeft)
{
ApplicationArea = Basic, Suite;
Caption = 'All Columns Left';
Image = PreviousSet;
ToolTip = 'Jump to the left-most column.';
trigger OnAction()
begin
PermissionPagesMgt.AllColumnsLeft();
end;
}
action(ColumnLeft)
{
ApplicationArea = Basic, Suite;
Caption = 'Column Left';
Image = PreviousRecord;
ToolTip = 'Jump one column to the left.';
trigger OnAction()
begin
PermissionPagesMgt.ColumnLeft();
end;
}
action(ColumnRight)
{
ApplicationArea = Basic, Suite;
Caption = 'Column Right';
Image = NextRecord;
ToolTip = 'Jump one column to the right.';
trigger OnAction()
begin
PermissionPagesMgt.ColumnRight();
end;
}
action(AllColumnsRight)
{
ApplicationArea = Basic, Suite;
Caption = 'All Columns Right';
Image = NextSet;
ToolTip = 'Jump to the right-most column.';
trigger OnAction()
begin
PermissionPagesMgt.AllColumnsRight();
end;
}
}
area(Promoted)
{
group(Category_Process)
{
Caption = 'Process', Comment = 'Generated from the PromotedActionCategories property index 1.';
actionref(Permissions_Promoted; Permissions)
{
}
actionref(CopyPermissionSet_Promoted; CopyPermissionSet)
{
}
}
group(Category_Report)
{
Caption = 'Report', Comment = 'Generated from the PromotedActionCategories property index 2.';
}
group(Category_Category4)
{
Caption = 'Browse', Comment = 'Generated from the PromotedActionCategories property index 3.';
actionref(AllColumnsLeft_Promoted; AllColumnsLeft)
{
}
actionref(ColumnLeft_Promoted; ColumnLeft)
{
}
actionref(ColumnRight_Promoted; ColumnRight)
{
}
actionref(AllColumnsRight_Promoted; AllColumnsRight)
{
}
}
}
}
trigger OnAfterGetRecord()
begin
FindSecurityGroups();
end;
trigger OnAfterGetCurrRecord()
begin
FindSecurityGroups();
end;
trigger OnInit()
var
[SecurityFiltering(SecurityFilter::Ignored)]
AccessControl: Record "Access Control";
begin
PermissionPagesMgt.DisallowEditingPermissionSetsForNonAdminUsers();
CanManageUsersOnTenant := AccessControl.WritePermission();
end;
trigger OnOpenPage()
begin
SecurityGroup.GetGroups(SecurityGroupBuffer);
NoOfRecords := SecurityGroupBuffer.Count();
PermissionPagesMgt.Init(NoOfRecords, ArrayLen(SecurityGroupCodeArr));
end;
var
PermissionPagesMgt: Codeunit "Permission Pages Mgt.";
AllGroupsHavePermission: Boolean;
CanManageUsersOnTenant: Boolean;
NoOfRecords: Integer;
SecurityGroupCodeArr: array[10] of Code[20];
SecurityGroupHasPermissionSet: array[10] of Boolean;
AllUserGrpGetsPermissionQst: Label 'Are you sure you want to add this permission set to all security groups?';
local procedure FindSecurityGroups()
var
LocalSecurityGroupBuffer: Record "Security Group Buffer";
i: Integer;
begin
LocalSecurityGroupBuffer.Copy(SecurityGroupBuffer, true);
Clear(SecurityGroupCodeArr);
Clear(SecurityGroupHasPermissionSet);
AllGroupsHavePermission := true;
if LocalSecurityGroupBuffer.FindSet() then
repeat
i += 1;
if PermissionPagesMgt.IsInColumnsRange(i) then begin
SecurityGroupCodeArr[i - PermissionPagesMgt.GetOffset()] := LocalSecurityGroupBuffer.Code;
SecurityGroupHasPermissionSet[i - PermissionPagesMgt.GetOffset()] := SecurityGroupHasPermission(Rec, LocalSecurityGroupBuffer."Group User SID");
AllGroupsHavePermission := AllGroupsHavePermission and SecurityGroupHasPermissionSet[i - PermissionPagesMgt.GetOffset()];
end else
if AllGroupsHavePermission then
AllGroupsHavePermission := SecurityGroupHasPermission(Rec, LocalSecurityGroupBuffer."Group User SID");
until (LocalSecurityGroupBuffer.Next() = 0) or (PermissionPagesMgt.IsPastColumnRange(i) and not AllGroupsHavePermission);
end;
local procedure SecurityGroupHasPermission(var AggregatePermissionSet: Record "Aggregate Permission Set"; GroupUserSID: Guid): Boolean
var
AccessControl: Record "Access Control";
begin
AccessControl.SetRange("User Security ID", GroupUserSID);
AccessControl.SetRange("Role ID", AggregatePermissionSet."Role ID");
AccessControl.SetRange("App ID", AggregatePermissionSet."App ID");
AccessControl.SetRange(Scope, AggregatePermissionSet.Scope);
exit(not AccessControl.IsEmpty);
end;
local procedure SetColumnPermission(ColumnNo: Integer; UserHasPermission: Boolean)
var
LocalSecurityGroupBuffer: Record "Security Group Buffer";
begin
LocalSecurityGroupBuffer.Copy(SecurityGroupBuffer, true);
if ColumnNo > 0 then begin
SetSecurityGroupPermission(SecurityGroupCodeArr[ColumnNo], UserHasPermission);
AllGroupsHavePermission := AllGroupsHavePermission and UserHasPermission;
end else
if LocalSecurityGroupBuffer.FindSet() then
repeat
SetSecurityGroupPermission(LocalSecurityGroupBuffer.Code, UserHasPermission);
until LocalSecurityGroupBuffer.Next() = 0;
end;
local procedure SetSecurityGroupPermission(SecurityGroupCode: Code[20]; DoesSecurityGroupHavePermission: Boolean)
var
LocalSecurityGroupBuffer: Record "Security Group Buffer";
AccessControl: Record "Access Control";
begin
LocalSecurityGroupBuffer.Copy(SecurityGroupBuffer, true);
LocalSecurityGroupBuffer.Get(SecurityGroupCode);
if AccessControl.Get(LocalSecurityGroupBuffer."Group User SID", Rec."Role ID", '', Rec.Scope, Rec."App ID") then begin
if not DoesSecurityGroupHavePermission then
AccessControl.Delete(true);
exit;
end;
if not DoesSecurityGroupHavePermission then
exit;
AccessControl.Init();
AccessControl."User Security ID" := LocalSecurityGroupBuffer."Group User SID";
AccessControl."Role ID" := Rec."Role ID";
AccessControl."App ID" := Rec."App ID";
AccessControl.Scope := Rec.Scope;
AccessControl.Insert(true);
end;
var
SecurityGroupBuffer: Record "Security Group Buffer";
SecurityGroup: Codeunit "Security Group";
}