It’s been a long time ago, but I was part of a team that set something like this up back in 2002. This wasn’t done on dreamhost at the time, but i believe you should be able to set it up here. Others may have another approach based on tools we didn’t have back then.
This approach relies on advanced usage of UNIX groups and file and directory permissions,
We set up a user for the media team to use as both working storage and as the gateway to publication. When the team was ready to publish a file they created a 3 line text file with a specific format, all 3 lines were quoted text strings. line 1 was the filename of the media “example.mpg”, line 2 was the title “candidates speech at some event on 1/1/2002”, line 3 was a longer description enclosed in quotes. Then they moved both the media file and the text file to a specific “/publish” directory on this user.
As I recall this user had a cron job that ran at :28 and :58 to set the group and file permissions of every file that existed in /publish
There was a second cron job that ran at :30 and :00 from the user associated with the website. That script:
captured a listing of files ending in .txt on the other users /publish directory
Did basic validity checking on the contents of any .txt file found, that it contained 3 lines only, that the file named on line 1 was available in /publish also, etc
It performed some basic checks/test on the media file to ensure it was playable and not corrupt.
if any test failed it renamed the files .rejected and left them in the /publish directory
If the basic checks succeed it moved and renamed the media files to the website user, changed the file owner, changed the file group and set the permissions of the media file.
updated the database with the file name, title and description.
copied detailed information to a .log file on both users and emailed errors
 later functionality replace and delete a file as well as just publish, but i dropped off the (unpaid) team before that happaned.
[*] later functionality was added that created a publish now functionality when a user created an empty file called publish.now in the /publish directory.
There are a few thoughts on at one approach.