Page 9853 Effective Permissions By Set

App
Base Application
Namespace
System.Security.AccessControl
Versions
17-28
Source table
9852

Procedures, 1

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/System/Permissions/EffectivePermissionsBySet.Page.al216 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.Security.AccessControl;

page 9853 "Effective Permissions By Set"
{
    Caption = 'By Permission Set';
    DeleteAllowed = false;
    InsertAllowed = false;
    PageType = ListPart;
    SourceTable = "Permission Buffer";
    SourceTableTemporary = true;

    layout
    {
        area(content)
        {
            repeater(Control5)
            {
                ShowCaption = false;
                field("Permission Set"; Rec."Permission Set")
                {
                    ApplicationArea = All;
                    Editable = false;

                    trigger OnDrillDown()
                    var
                        TenantPermission: Record "Tenant Permission";
                    begin
                        if Rec.Source in [Rec.Source::Entitlement, Rec.Source::Inherent] then
                            exit;
                        Rec.OpenPermissionsPage(true);
                        if Rec.Type = Rec.Type::"User-Defined" then
                            if TenantPermission.Get(Rec.GetAppID(), Rec."Permission Set", CurrObjectType, CurrObjectID) then begin
                                Rec."Read Permission" := TenantPermission."Read Permission";
                                Rec."Insert Permission" := TenantPermission."Insert Permission";
                                Rec."Modify Permission" := TenantPermission."Modify Permission";
                                Rec."Delete Permission" := TenantPermission."Delete Permission";
                                Rec."Execute Permission" := TenantPermission."Execute Permission";
                                Rec.Modify();
                                RefreshDisplayTexts();
                            end;
                    end;
                }
                field(Source; Rec.Source)
                {
                    ApplicationArea = All;
                    Enabled = false;
                    Style = Strong;
                    StyleExpr = Rec.Source = Rec.Source::Entitlement;
                }
                field(Type; Rec.Type)
                {
                    ApplicationArea = All;
                    Enabled = false;
                }
                field(ReadTxt; ReadPermissionsTxt)
                {
                    ApplicationArea = All;
                    Caption = 'Read Permission';
                    Editable = false;

                    trigger OnDrillDown()
                    begin
                        EffectivePermissionsMgt.ShowPermissionConflict(ReadPermissions, ReadEntitlementPermissions, Rec.Source = Rec.Source::Entitlement);
                    end;
                }
                field(InsertTxt; InsertPermissionsTxt)
                {
                    ApplicationArea = All;
                    Caption = 'Insert Permission';
                    Editable = false;

                    trigger OnDrillDown()
                    begin
                        EffectivePermissionsMgt.ShowPermissionConflict(InsertPermissions, InsertEntitlementPermissions, Rec.Source = Rec.Source::Entitlement);
                    end;
                }
                field(ModifyTxt; ModifyPermissionsTxt)
                {
                    ApplicationArea = All;
                    Caption = 'Modify Permission';
                    Editable = false;

                    trigger OnDrillDown()
                    begin
                        EffectivePermissionsMgt.ShowPermissionConflict(ModifyPermissions, ModifyEntitlementPermissions, Rec.Source = Rec.Source::Entitlement);
                    end;
                }
                field(DeleteTxt; DeletePermissionsTxt)
                {
                    ApplicationArea = All;
                    Caption = 'Delete Permission';
                    Editable = false;

                    trigger OnDrillDown()
                    begin
                        EffectivePermissionsMgt.ShowPermissionConflict(DeletePermissions, DeleteEntitlementPermissions, Rec.Source = Rec.Source::Entitlement);
                    end;
                }
                field(ExecuteTxt; ExecutePermissionsTxt)
                {
                    ApplicationArea = All;
                    Caption = 'Execute Permission';
                    Editable = false;

                    trigger OnDrillDown()
                    var
                    begin
                        EffectivePermissionsMgt.ShowPermissionConflict(ExecutePermissions, ExecuteEntitlementPermissions, Rec.Source = Rec.Source::Entitlement);
                    end;
                }
                field("Security Filter"; Rec."Security Filter")
                {
                    ApplicationArea = All;
                    Caption = 'Security Filter';
                    Editable = false;
                }
            }
        }
    }

    actions
    {
        area(processing)
        {
        }
    }

    trigger OnAfterGetRecord()
    begin
        RefreshDisplayTexts();
    end;

    trigger OnOpenPage()
    begin
        Rec.SetCurrentKey(Order, Type);
    end;

    var
        EntitlementPermissionBuffer: Record "Permission Buffer";
        EffectivePermissionsMgt: Codeunit "Effective Permissions Mgt.";
        ReadPermissionsTxt: Text;
        InsertPermissionsTxt: Text;
        ModifyPermissionsTxt: Text;
        DeletePermissionsTxt: Text;
        ExecutePermissionsTxt: Text;
        IsTableData: Boolean;
        CurrObjectType: Option;
        CurrObjectID: Integer;
        CurrUserID: Guid;
        ReadPermissions: Enum Permission;
        InsertPermissions: Enum Permission;
        ModifyPermissions: Enum Permission;
        DeletePermissions: Enum Permission;
        ExecutePermissions: Enum Permission;
        ReadEntitlementPermissions: Enum Permission;
        InsertEntitlementPermissions: Enum Permission;
        ModifyEntitlementPermissions: Enum Permission;
        DeleteEntitlementPermissions: Enum Permission;
        ExecuteEntitlementPermissions: Enum Permission;

    local procedure RefreshDisplayTexts()
    var
        IsSourceEntitlement: Boolean;
    begin
        ReadPermissions := EffectivePermissionsMgt.ConvertToPermission(Rec."Read Permission");
        InsertPermissions := EffectivePermissionsMgt.ConvertToPermission(Rec."Insert Permission");
        ModifyPermissions := EffectivePermissionsMgt.ConvertToPermission(Rec."Modify Permission");
        DeletePermissions := EffectivePermissionsMgt.ConvertToPermission(Rec."Delete Permission");
        ExecutePermissions := EffectivePermissionsMgt.ConvertToPermission(Rec."Execute Permission");

        ReadEntitlementPermissions := EffectivePermissionsMgt.ConvertToPermission(EntitlementPermissionBuffer."Read Permission");
        InsertEntitlementPermissions := EffectivePermissionsMgt.ConvertToPermission(EntitlementPermissionBuffer."Insert Permission");
        ModifyEntitlementPermissions := EffectivePermissionsMgt.ConvertToPermission(EntitlementPermissionBuffer."Modify Permission");
        DeleteEntitlementPermissions := EffectivePermissionsMgt.ConvertToPermission(EntitlementPermissionBuffer."Delete Permission");
        ExecuteEntitlementPermissions := EffectivePermissionsMgt.ConvertToPermission(EntitlementPermissionBuffer."Execute Permission");

        IsSourceEntitlement := (Rec.Source = Rec.Source::Entitlement);

        ReadPermissionsTxt := EffectivePermissionsMgt.GetPermissionStatus(ReadPermissions, ReadEntitlementPermissions, IsSourceEntitlement);
        InsertPermissionsTxt := EffectivePermissionsMgt.GetPermissionStatus(InsertPermissions, InsertEntitlementPermissions, IsSourceEntitlement);
        ModifyPermissionsTxt := EffectivePermissionsMgt.GetPermissionStatus(ModifyPermissions, ModifyEntitlementPermissions, IsSourceEntitlement);
        DeletePermissionsTxt := EffectivePermissionsMgt.GetPermissionStatus(DeletePermissions, DeleteEntitlementPermissions, IsSourceEntitlement);
        ExecutePermissionsTxt := EffectivePermissionsMgt.GetPermissionStatus(ExecutePermissions, ExecuteEntitlementPermissions, IsSourceEntitlement);

        CurrPage.Update(false);
    end;

    procedure SetRecordAndRefresh(PassedUserID: Guid; PassedCompanyName: Text[50]; CurrentObjectType: Option; CurrentObjectID: Integer)
    var
        TempPermissionBuffer: Record "Permission Buffer" temporary;
        Permission: Record Permission;
        EffectivePermissionsMgt: Codeunit "Effective Permissions Mgt.";
    begin
        EffectivePermissionsMgt.PopulatePermissionBuffer(TempPermissionBuffer, PassedUserID, PassedCompanyName,
          CurrentObjectType, CurrentObjectID);

        Rec.DeleteAll();

        if TempPermissionBuffer.FindSet() then
            repeat
                Rec := TempPermissionBuffer;
                Rec.Insert();
                if TempPermissionBuffer.Source = TempPermissionBuffer.Source::Entitlement then
                    EntitlementPermissionBuffer := TempPermissionBuffer;
            until TempPermissionBuffer.Next() = 0;

        CurrObjectType := CurrentObjectType;
        CurrObjectID := CurrentObjectID;
        CurrUserID := PassedUserID;
        IsTableData := CurrObjectType = Permission."Object Type"::"Table Data";

        CurrPage.Update(false);
    end;
}