Все просто, я сам такое недавно делал.
В роутах определяешь область видимости.
А в конечных компонентах из стора получаешь текущую роль.
Вот пример такого компонента
class ProtectedRoute extends Component {
render() {
const {component, ...rest} = this.props
return <Route {...rest} render = {this.getComponent}/>
}
getComponent = (...args) => {
return this.props.user && this.props.access.indexOf(this.props.user.role) !== -1 ? <Main title={this.props.title} ><this.props.component {...args} /></Main> :
<ErrorPage/>
}
}
export default connect(state => ({
user: userSelector(state)
}), null, null, { pure: false })(ProtectedRoute)
Тут в this.props.access определяешь идентификаторы доступных ролей