If you edit the Usable_Door actor you will want to fully override the OnActorUsed function. You will still need to setup the WasUsed logic you will find in the Parent Class Usable_Actor->OnActorUsed(). But now this will allow you to add your more advanced logic. (You can see in World_Actor how it interacts with the players inventory to pick up an item. You will probably want to make a “FindItem” type function in the InventoryManagerComponent to search for a key item and then check it’s KeyID)
You can add some simple variables like a Bool IsLocked/Lockable and then a Variable for a KeyID. Since the OnActorUsed function happens on the server you would simply want to just checked first if the door is locked. If it is then add logic to check the Inventory of the player who is using it (the PlayerController gets passed into the OnActorUsed function so you know who is using it. Simply cast to YourPlayerController to access the InventoryComponent) to see if they have a key item with that ID.
All in all it should be pretty basic to setup. I would suggest just getting basic functionality working then you can dive into making it so the player can lock/unlock/relock the door or consuming the key on use, etc.
Hope that helps give you some ideas