Привет.
Дошел до этапа проектирования компонентов в реакте и встал вопрос как делить компоненты по ролям.
Есть 3 роли в системе.
Общий вид одинаковый для всех: слева меню, справа отображение либо грид либо таблица.
Просто у админа в меню больше элементов, а справа всё доступно.
А у простого сотрудника в меню вместо 5 элементов меню всего один, а справа грид и таблица только на чтение, хотя у админа в этой таблице и гриде есть доп.кнопки.
Вопрос: как делить на компоненты? Делать один компонент Меню для всех ролей и его уже наполнять в зависимости от роли или же сделать 3 разных компонента для каждой роли со статическим наполнением? Для таблицы и грида тоже визуально выглядят одинаково, просто у админа есть доп.кнопки на которые открываются доп.окна.
Здравствуйте, peer, Вы писали:
P>Привет.
P>Дошел до этапа проектирования компонентов в реакте и встал вопрос как делить компоненты по ролям.
P>Есть 3 роли в системе.
P>Общий вид одинаковый для всех: слева меню, справа отображение либо грид либо таблица.
P>Просто у админа в меню больше элементов, а справа всё доступно.
P>А у простого сотрудника в меню вместо 5 элементов меню всего один, а справа грид и таблица только на чтение, хотя у админа в этой таблице и гриде есть доп.кнопки.
P>Вопрос: как делить на компоненты? Делать один компонент Меню для всех ролей и его уже наполнять в зависимости от роли или же сделать 3 разных компонента для каждой роли со статическим наполнением? Для таблицы и грида тоже визуально выглядят одинаково, просто у админа есть доп.кнопки на которые открываются доп.окна.
Интерфейс лучше всего проектировать по функционалу, а не по ролям. Т.е. есть например вкладка "Администрирование", кладка "Должники" и т.д. а доступность, видимость и активность элементов определять на основе прав пользователя, если предполагается, что права пользователя могут настраиваться по желанию. Так что первый вариант лучше.
P.S. React — среди spа-фреймворков, это как js среди языков.
P>Делать один компонент Меню для всех ролей и его уже наполнять в зависимости от роли
Да
P>Для таблицы и грида тоже визуально выглядят одинаково, просто у админа есть доп.кнопки на которые открываются доп.окна.
Тоже делать один компонент
Пока достаточно будет самой простой реализации: в компонент через пропсы прикидывается роль (уже можно через енум сделать) и в зависимости от роли рендерятся те или иные части компонента.
Позже, если роли будут навороченнее и компонент будет больше — можно будет делать примерно так (authProvider, canAccess() и прочее)
https://github.com/marmelab/react-admin/blob/master/docs/Permissions.md