1) You could create a security table, with columns COUNTY_ID AND USER NAME. This table would always carry a user list and county they are mapped to. Likely a long and narrow table, but indexed and fast.
2) Go to your workbook and do an inner join to this table, with COUNTY_ID field.
3) Create a filter in the workbook which would always check for the logged in user and serve only that data.
You can even skip the security table altogether if your USERNAME() or USERDOMAIN() fields in tableau, matches your Data field. In which case you would only do Step 3, and skip steps 1 and 2.
It looks like most of it is set up that way. Would you know how to pass the county ID from our app front end to the Tableau public server? This has been a show stopper for us. Any help is greatly appreciated!
If you are embedding the tableau workbook, you can pass the filter through embed code. You could see the iframe tags in here. Parameters for Embed Code
Even if its direct URL, you can just append the view with ?<Filter name>=<value>
Only problem with this is they can try out different ID's and be able to get to other counties. But if you embed everything in an iframe, you are good. that way behind the screens you could just pass county ID and display the iframe and user may not be able to tamper with the URL/filter values you passed.
Just remember to create the county_id filter and add it to workbooks, and make it a context/apply to all datasources filter.