No contracts cant create other contracts or assets, but a call to a smartcontract can be grouped to with an asset creation transaction or smart contract creation transaction to approve the creation.
To complement @JasonW’s answer, while you can make smart contracts create smart contracts and assets by using group transactions, for many use cases, you most likely do not want to do it this way on Algorand.