maralov
@maralov
фронт-джун

Как бы вы решили задачу?

Есть объект в котором хранятся пути, общее количество страниц будет пополняться, количество и порядок не известное.
const PATH = {
  HOME: '/',
  ADMIN_PAGE: '/admin',
  CABINET_PAGE: '/cabinet',
  LOGIN: '/log-in',
  PAGE_1: '/1',
  PAGE_2: '/2',
  PAGE_3: '/3',
  PAGE_4: '/4',
  PAGE_5: '/5',
  PAGE_6: '/7',
  // и тд общее количество неизвестно
};

Задача на выходе получить объект по типу:

const avaiblePath = {
  user1: [все ] 
  user2: [все кроме PATH.ADMIN_PAGE и PATH.PAGE_1 ], 
  user3: [только PATH.HOME, PATH.CABINET_PAGE, PATH.LOGIN и PATH.PAGE_1],
}


мое решение Тут, мне кажется, что оно не очень гибкое (тк если для юзеров будут добавляться доступный или недоступные пути, надо буде руками их дублировать…но возможно и нет другого решения) и громоздкое. Хотел бы получить оценку от опытных коллег =)
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Вы делаете какой-то гибрид между ACL и RBAC.

ACL проще изначально, но с ростом проекта превращается в адовую лапшу.
RBAC на простых проектах кажется оверкиллом, но это очень удобно.

Если коротко: У вас есть юзеры.
Каждый юзер состоит в одной или сразу нескольких группах.
У каждой страницы есть список, каким группам туда можно заходить, а каким нет.
Допустим на /login можно вообще всем, на /admin только тем, кто в группе администраторов и так далее.

Еще один плюс использования стандартных решений: уже есть гайды и даже готовые библиотеки
https://www.google.com/search?q=js+rbac

но возможно и нет другого решения
множество их https://en.wikipedia.org/wiki/Role-based_access_co... в этом списке далеко не все.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы