I'd recommend using item scripts. For example, if you have an item called "key" you could have a door sprite that checks for it with {if {eq {item-count "key"} 1}} ... {/if}. And if you want to check for multiple items, you could do this: {if {all-true {eq {item-count "flour"} 1} {eq {item-count "sugar"} 1} {eq {item-count "butter"} 1}}} ... {/if}.
To make the door passable, you could either make two sprites - an open one and a closed one - and use {transform-sprite "open-door"} OR you could just make the door no longer block the player with {set-sprite-wall false}
Hope that helps!