Hi,
My extension has a Assisted Setup wizard to configure some stuff. It requires Read and Modify permissions on "My Table". Those permissions can be set with "My PermissionSet".
I did not like the default "'You do not have the following permissions on TableData MyTable: Read. etc." error, so I made a Step in the NavigatePage wizard to show a nice error message telling the user they need "My PermissionSet". I use Codeunit "User Permissions".HasUserPermissionSetAssigned to check for the permissionSet and this seems to work fine when using the extension.
However, when I try to test this functionality I can't get it to work. In the example below, the LibraryLowerPermissions does not work when manually checking "User Permissions".
Am I missing something in the test? Is this not the right way to implement a manual permissions check?
[Test]
procedure PermissionTest()
var
MyTable: Record MyTable;
begin
// Using permissions that do not inlcude SUPER
LibraryLowerPermissions.SetO365BusFull();
LibraryLowerPermissions.AddPermissionSet('MY PERMISSIONSET');
// Default permission check works.
Assert.IsTrue(MyTable.FindFirst(), '');
AssertMyTablePermissionset();
end;
local procedure AssertMyTablePermissionset()
var
AccessControl: Record "Access Control";
UserPermissions: Codeunit "User Permissions";
myAppInfo: ModuleInfo;
UserSecurityId: Guid;
begin
NavApp.GetCurrentModuleInfo(myAppInfo);
UserSecurityId := Database.UserSecurityId();
// Should be false but is true.
Assert.IsFalse(UserPermissions.IsSuper(UserSecurityId), '');
// Should be true but is false.
Assert.IsTrue(UserPermissions.HasUserPermissionSetAssigned(UserSecurityId, Database.CompanyName(),
'MY PERMISSIONSET', AccessControl.Scope::System, myAppInfo.Id), '');
end;