How do I implement GENERIC_READ properly?

Hi,
I would like to understand the correct usage/implementation of SecurityActions and GENERIC_READ or GENERIC_WRITE in a Management Client Plugin.

We create a new ItemNode without security actions in the first place. But when we start the Management Client and when we switch to the Overall Security tab in the Roles config for a ‘Basic user’, (SECURITY→ROLES→→OVERALL SECURITY) we see the following error:

TITLE: Milestone XProtect Management Client 2025 R3

Could not retrieve information for the security action GENERIC_READ.


ADDITIONAL INFORMATION:

VMO60013: Could not retrieve information for the security action GENERIC_READ. (mscorlib)


BUTTONS:

OK

When we create the item node like shown below:

ItemNode myItem =
new(
    id: managementClientSettingsPluginGuid,
    parentId: Guid.Empty,
    nodeText: this.Name,
    image: this.Icon,
    nodeTextMultiple: this.Name,
    imageMultiple: this.Icon,
    category: Category.Server,
    selectable: true,
    itemsAllowed: ItemsAllowed.None,
    itemManager: this.myItemManager,
    itemNodes: null,
    securityActions: null,
    contextMenu: null,
    customData: null,
    placementHint: PlacementHint.Basics);


But when we then add security actions like below:

 List<SecurityAction> securityActions = new List<SecurityAction>
 {
     new SecurityAction("GENERIC_WRITE", "Manage"),
     new SecurityAction("GENERIC_READ", "Read"),
 };

ItemNode myItem =
new(
    id: managementClientSettingsPluginGuid,
    parentId: Guid.Empty,
    nodeText: this.Name,
    image: this.Icon,
    nodeTextMultiple: this.Name,
    imageMultiple: this.Icon,
    category: Category.Server,
    selectable: true,
    itemsAllowed: ItemsAllowed.None,
    itemManager: this.myItemManager,
    itemNodes: null,
    securityActions: securityActions,
    contextMenu: null,
    customData: null,
    placementHint: PlacementHint.Basics);

we get the following error during the Management Client startup

TITLE: InitItemManagers ()

PATCH Unexpected statuscode BadRequest in ‘http://win-d69ff5p1p4r/API/rest/v1/mipKinds/7de025db-8a5f-4743-9973-a076f5a066ee’ - Modifying order of MIP SecurityAction list is not supported for already defined SecurityActions




ADDITIONAL INFORMATION:

PATCH Unexpected statuscode BadRequest in ‘http://win-d69ff5p1p4r/API/rest/v1/mipKinds/7de025db-8a5f-4743-9973-a076f5a066ee’ - Modifying order of MIP SecurityAction list is not supported for already defined SecurityActions (VideoOS.Platform)




BUTTONS:

OK

How is the security actions supposed to be implemented?
Tested against XProtect 2025R2 / MIP SDK version 2024R1

Please see how SecurityActions are created in the Sensor Monitor plugin sample.

What you are doing looks very similar, so if the sample does not work for you, please let us know what part behaves differently.

Hello Bo,
thanks for the reply.

With the Sensor Monitor sample I get the same error message.


TITLE: Milestone XProtect Management Client 2025 R3

Could not retrieve information for the security action GENERIC_READ.


ADDITIONAL INFORMATION:

VMO60013: Could not retrieve information for the security action GENERIC_READ. (mscorlib)


BUTTONS:

OK

Also, when I try to access the security actions fot the controllers i do get this error.

Have you at any point modified the security actions? My hunch is that this may be the case, and that it has left invalid entries in the configuration SQL Server database.

As a test, you could try starting over by changing only the GUIDs in the sample (keeping everything else exactly the same) and see whether the issue still occurs.

If you have ideas on what might differ between your setup and mine—causing you to see the issue while I don’t—I’d very much welcome those suggestions.

Ok - I’ll do some more tests.

Also - on other systems and let you know. Basically the example is very vanilla. Just cloned the repo and built it.