Page 9801 User Subform, source in 26
Source2526272829metadata in 26
src/System Application/App/User Permissions/src/UserSubform.Page.al147 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace System.Security.User;
using System.Security.AccessControl;
page 9801 "User Subform"
{
Caption = 'User Permission Sets';
DelayedInsert = true;
PageType = ListPart;
SourceTable = "Access Control";
layout
{
area(content)
{
repeater(Group)
{
Caption = 'User Permissions';
field(PermissionSet; Rec."Role ID")
{
ApplicationArea = Basic, Suite;
Caption = 'Permission Set';
ToolTip = 'Specifies the ID of a security role that has been assigned to this Windows login in the current database.';
Style = Unfavorable;
StyleExpr = PermissionSetNotFound;
trigger OnLookup(var Text: Text): Boolean
var
LookupPermissionSet: Page "Lookup Permission Set";
begin
LookupPermissionSet.LookupMode := true;
if LookupPermissionSet.RunModal() = ACTION::LookupOK then begin
LookupPermissionSet.GetRecord(PermissionSetLookupRecord);
Text := PermissionSetLookupRecord."Role ID";
PermissionSetLookupRecord.SetRecFilter();
exit(true);
end;
end;
trigger OnValidate()
begin
PermissionSetLookupRecord.SetRange("Role ID", Rec."Role ID");
PermissionSetLookupRecord.FindFirst();
if PermissionSetLookupRecord.Count > 1 then
Error(MultipleRoleIDErr, Rec."Role ID");
Rec.Scope := PermissionSetLookupRecord.Scope;
Rec."App ID" := PermissionSetLookupRecord."App ID";
PermissionScope := Format(PermissionSetLookupRecord.Scope);
Rec.CalcFields("App Name", "Role Name");
PermissionSetLookupRecord.Reset();
end;
}
field(Description; Rec."Role Name")
{
ApplicationArea = Basic, Suite;
Caption = 'Description';
DrillDown = false;
Editable = false;
ToolTip = 'Specifies the name of the security role that has been given to this Windows login in the current database.';
}
field(Company; Rec."Company Name")
{
ApplicationArea = Basic, Suite;
Caption = 'Company';
ToolTip = 'Specifies the name of the company that this role is limited to for this Windows login.';
}
field(ExtensionName; Rec."App Name")
{
ApplicationArea = Basic, Suite;
Caption = 'Extension Name';
DrillDown = false;
Editable = false;
ToolTip = 'Specifies the name of the extension.';
}
field(PermissionScope; PermissionScope)
{
ApplicationArea = Basic, Suite;
Caption = 'Permission Scope';
Editable = false;
ToolTip = 'Specifies the scope of the permission set.';
}
}
}
}
var
PermissionSetLookupRecord: Record "Aggregate Permission Set";
User: Record User;
MultipleRoleIDErr: Label 'The permission set %1 is defined multiple times in this context. Use the lookup button to select the relevant permission set.', Comment = '%1 will be replaced with a Role ID code value from the Permission Set table';
PermissionSetAddedToUserLbl: Label 'The permission set %1 has been added to the user %2 by UserSecurityId %3.', Comment = '%1 - Role ID, %2 - UserSecurityId, %3 - Current UserSecurityId';
PermissionScope: Text;
PermissionSetNotFound: Boolean;
UserPermissionsTok: Label 'User Permissions', Locked = true;
trigger OnAfterGetRecord()
var
AggregatePermissionSet: Record "Aggregate Permission Set";
begin
if User."User Name" <> '' then
CurrPage.Caption := User."User Name";
PermissionScope := Format(Rec.Scope);
PermissionSetNotFound := false;
if not (Rec."Role ID" in ['SUPER', 'SECURITY']) then begin
PermissionSetNotFound := not AggregatePermissionSet.Get(Rec.Scope, Rec."App ID", Rec."Role ID");
if PermissionSetNotFound then
OnPermissionSetNotFound();
end;
end;
trigger OnInsertRecord(BelowxRec: Boolean): Boolean
begin
User.TestField("User Name");
Rec.CalcFields("App Name", Rec."Role Name");
Session.LogSecurityAudit(UserPermissionsTok, SecurityOperationResult::Success, StrSubstNo(PermissionSetAddedToUserLbl, Rec."Role ID", Rec."User Security ID", UserSecurityId()), AuditCategory::UserManagement);
Session.LogAuditMessage(StrSubstNo(PermissionSetAddedToUserLbl, Rec."Role ID", Rec."User Security ID", UserSecurityId()), SecurityOperationResult::Success, AuditCategory::UserManagement, 2, 0);
end;
trigger OnModifyRecord(): Boolean
begin
Rec.CalcFields("App Name", Rec."Role Name");
end;
trigger OnNewRecord(BelowxRec: Boolean)
begin
if User.Get(Rec."User Security ID") then;
Rec.CalcFields("App Name", Rec."Role Name");
PermissionScope := '';
end;
[IntegrationEvent(false, false)]
local procedure OnPermissionSetNotFound()
begin
end;
}