Short answer
Fair does not mean everyone works the same shifts. It means the tradeoffs are out in the open, the rules are applied consistently, and the hard shifts do not keep landing on the same few people.
The test is simple: a manager should be able to explain any assignment with data, not from memory.
Track weekends, nights, and unpopular shifts
Rotate hard shifts where possible
Separate preferences from fixed constraints
Publish rules before exceptions happen
Review fairness over several weeks, not one schedule