Настройка разрешений на маршрут с помощью React Router - PullRequest
0 голосов
/ 10 октября 2019

При загрузке приложения у меня есть объект из бэкэнда со страницами, к которым у определенного пользователя есть доступ. Страницы без доступа не отображаются.

    {
      'User Management': {
        Users: {
          name: 'Users Page',
        },
        Groups: {
          name: 'Groups Page',
        },
      },
      'Data Management': {
        Schemas: {
          name: 'Schemas Page',
        },
        Lists: {
          name: 'Lists Page',
        },
      },
    };

Я создал компонент PrivateRoute и добавил в него реквизит checkPermissions, чтобы другие страницы не запускались.

    <PrivateRoute
      path={Routes.USER_MANAGEMENT.USERS}
      component={UserListView}
      exact
      name="Users"
      checkPermissions
    />

Способ проверки заключается в том, что если имя маршрута находится внутри объекта, то пользователь получает доступ к странице.

export const checkAccessPermission = (pages, routeName) =>
  deepFindKey(pages, routeName).length;

Не очень этим горжусьметод, но я не могу найти другой способ сделать это.

Другая проблема состоит в том, что страницы, которые находятся под User Management, были созданы как отдельные маршруты внутри отдельных компонентов, в то время как страницы внутри Data Management были созданыпо тому же маршруту и ​​тому же компоненту.

    <PrivateRoute
       path={`${Routes.DATA_MANAGEMENT}/:model/:id/:submodel`}
       component={DataModelListView}
       exact
     />

Так что это означает, что я не могу использовать свой предыдущий метод с name prop. Я мог бы сделать рефакторинг страниц User Management частью одного и того же компонента, но это может занять несколько дополнительных дней. Есть ли лучший способ обрабатывать разрешения для одной страницы, независимо от того, как настроены маршруты?

...