ChatterMessage object is for private messages.
postFeedElement(communityId, feedElement) is for direct messages.
I have done the setup like below and I'm able to switch between communities.
Created new SSO in Salesforce org.(setup > Single sign-on)
Created new connected app for the new SSO in the same org.(setup > app manager) and added the profiles under profile based access section.
Created a new remote site for the SSO issuer URL(new custom domain) under ...
You can perform DML if your class has a without sharing Clause. Also, you can display the data on UI if you have a wrapper class. But you can't do so by referring to the object itself.
If you are returning a list of Opportunities from the AuraEnabled apex method, if this method is called in the customer community context, you will run into an ...
You can write the DML statement in a method on an Apex Class that is declared "without sharing" so the action runs as the System User.
Documentation Link: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm