Your approach (as much as I understood of it) sounds good as a first attempt, although the proof of the pudding is eating it, so write the code and test it :-)
Note that it won't scale very well, so the question is how many chars and how long strings you expect to be generated. If the answer is "not many", and performance / memory consumption is not an issue, it is fine to stick with the simplest solution which works. Otherwise, you need a more sophisticated algorithm.
I've had a vaguely similar task some time ago, where the number of possible permutations was so large that there was simply not enough memory to contain each at the same time. So we tried to model the permutations with numbers: note that any n long permutation of m characters can be defined with an m base number of n digits. So by iterating through all integer values from 0 until mn, calling a fairly simple conversion method gets you each possible string one by one. For the index value of course you might need to use a bigger integer type like long long
for bigger m and n values.