Size: a a a

2020 July 04

VV

Vladislav Vladimirov... in Public | Kottans
источник

AM

Anastasiya Mashoshyn... in Public | Kottans
источник

E

EvgenyB in Public | Kottans
источник
2020 July 09

DF

Denis Fedichkin in Public | Kottans
Всем привет!
Можете подсказать как реализовать следующую задачу:
есть некое веб приложение с разделами и функционалом в этих разделах, у приложения есть разные пользователи с определенными ролями. У каждой роли есть свои разрешения на просмотр, редактирование, удаление, выполнение каких то действий и тому подобное.
Как эти разрешения можно наложить на интерфейс? Самое простое что приходит в голову - это куча if-else, как по мне вариант костыльный.
Ещё можно все компоненты наследовать от единого у которого будет атрибут отвечающий за то отображать его или нет или же просто задизейблить.
Может кто сталкивался с похожей задачей, был бы очень благодарен если бы вы описали свое виденье на решение такой задачи.
Спасибо!
источник

AA

Anna Alimova 👩‍💻... in Public | Kottans
Я это реализовывала в реакт-роутере. Плюс бэкенд тоже ограничивает на своей стороне. А на чем приложение?
источник

DF

Denis Fedichkin in Public | Kottans
Anna Alimova 👩‍💻
Я это реализовывала в реакт-роутере. Плюс бэкенд тоже ограничивает на своей стороне. А на чем приложение?
реакто-подобная библиотека.
Как я с помощью роута скрою для примера пункт меню или кнопку?
источник

AA

Anna Alimova 👩‍💻... in Public | Kottans
Ааа, это! Доберусь до компа - скину пример
источник

DF

Denis Fedichkin in Public | Kottans
Anna Alimova 👩‍💻
Ааа, это! Доберусь до компа - скину пример
Буду благодарен!
источник

AA

Anna Alimova 👩‍💻... in Public | Kottans
menuGroups = {
               admin: ['one', 'two', 'three'],
               manager: ['one', 'two'],
               user: []
           },
           itemsList = [
               {link: 'one', name: 'Menu item 1'},
               {link: 'two', name: 'Menu Item 2'},
               {link: 'three', name: 'Menu item 3'},
               
           ];
       let currentMenuGroup = menuGroups['user'];

       switch (user.role) {
           case 'admin':
               currentMenuGroup = menuGroups['admin'];
               break;
           case 'manager':
               currentMenuGroup = menuGroups['manager'];
               break;
           default:
               currentMenuGroup = menuGroups['user'];
               break;
       }

drawMenuItems(currentMenuGroup, itemsList) {
       return (
           itemsList.map(item => {
               return currentMenuGroup.indexOf(item.link) !== -1
                   ? <li
                       key={item.link}
                       className={
                           location.pathname.indexOf(item.link) !== -1
                               ? 'active'
                               : ''
                   }>
                       <Link to={`${config.location}/${item.link}`}>{item.name}</Link>
                   </li>
                   : '';
           })
       );
   }
источник

HH

Hydra Hydra in Public | Kottans
Denis Fedichkin
Всем привет!
Можете подсказать как реализовать следующую задачу:
есть некое веб приложение с разделами и функционалом в этих разделах, у приложения есть разные пользователи с определенными ролями. У каждой роли есть свои разрешения на просмотр, редактирование, удаление, выполнение каких то действий и тому подобное.
Как эти разрешения можно наложить на интерфейс? Самое простое что приходит в голову - это куча if-else, как по мне вариант костыльный.
Ещё можно все компоненты наследовать от единого у которого будет атрибут отвечающий за то отображать его или нет или же просто задизейблить.
Может кто сталкивался с похожей задачей, был бы очень благодарен если бы вы описали свое виденье на решение такой задачи.
Спасибо!
Написать функцию hasAccess, которая принимает юзера, энтитиТайп и экшнТайп и чекает череш хешмап или такой юзер может делать такое действие с такой энтитей
источник

DF

Denis Fedichkin in Public | Kottans
Anna Alimova 👩‍💻
menuGroups = {
               admin: ['one', 'two', 'three'],
               manager: ['one', 'two'],
               user: []
           },
           itemsList = [
               {link: 'one', name: 'Menu item 1'},
               {link: 'two', name: 'Menu Item 2'},
               {link: 'three', name: 'Menu item 3'},
               
           ];
       let currentMenuGroup = menuGroups['user'];

       switch (user.role) {
           case 'admin':
               currentMenuGroup = menuGroups['admin'];
               break;
           case 'manager':
               currentMenuGroup = menuGroups['manager'];
               break;
           default:
               currentMenuGroup = menuGroups['user'];
               break;
       }

drawMenuItems(currentMenuGroup, itemsList) {
       return (
           itemsList.map(item => {
               return currentMenuGroup.indexOf(item.link) !== -1
                   ? <li
                       key={item.link}
                       className={
                           location.pathname.indexOf(item.link) !== -1
                               ? 'active'
                               : ''
                   }>
                       <Link to={`${config.location}/${item.link}`}>{item.name}</Link>
                   </li>
                   : '';
           })
       );
   }
А такое нормально расширяется на больших системах?
источник

DF

Denis Fedichkin in Public | Kottans
Hydra Hydra
Написать функцию hasAccess, которая принимает юзера, энтитиТайп и экшнТайп и чекает череш хешмап или такой юзер может делать такое действие с такой энтитей
грубо говоря прогонять все компоненты через эту функцию?
источник

HH

Hydra Hydra in Public | Kottans
If hasAccess - render
источник

DF

Denis Fedichkin in Public | Kottans
и так для каждого компонента? мне кажется это не очень красиво получится
источник

AA

Anna Alimova 👩‍💻... in Public | Kottans
Denis Fedichkin
А такое нормально расширяется на больших системах?
Это же матрица доступов. Можно потом прокачать уровни вложенности, если надо.
источник

AA

Anna Alimova 👩‍💻... in Public | Kottans
А так нарастить количество разделов и ролей - запросто.
источник

DF

Denis Fedichkin in Public | Kottans
Anna Alimova 👩‍💻
Это же матрица доступов. Можно потом прокачать уровни вложенности, если надо.
спасибо, попробую!
источник

AL

Anton Lempiy in Public | Kottans
Denis Fedichkin
Всем привет!
Можете подсказать как реализовать следующую задачу:
есть некое веб приложение с разделами и функционалом в этих разделах, у приложения есть разные пользователи с определенными ролями. У каждой роли есть свои разрешения на просмотр, редактирование, удаление, выполнение каких то действий и тому подобное.
Как эти разрешения можно наложить на интерфейс? Самое простое что приходит в голову - это куча if-else, как по мне вариант костыльный.
Ещё можно все компоненты наследовать от единого у которого будет атрибут отвечающий за то отображать его или нет или же просто задизейблить.
Может кто сталкивался с похожей задачей, был бы очень благодарен если бы вы описали свое виденье на решение такой задачи.
Спасибо!
ми реалізовували через  policies:
На кожну сутність що має CRUD (user, order, dataObject etc) бекенд присилає standard (edit, delete ...) i custom policies (able_to_created_pdf, able_to_spread_wings, etc). UI будується на перевірці наявності певної policy в списку доступних для сутності в її нинішньому стані на бекенді.
источник

DF

Denis Fedichkin in Public | Kottans
Anton Lempiy
ми реалізовували через  policies:
На кожну сутність що має CRUD (user, order, dataObject etc) бекенд присилає standard (edit, delete ...) i custom policies (able_to_created_pdf, able_to_spread_wings, etc). UI будується на перевірці наявності певної policy в списку доступних для сутності в її нинішньому стані на бекенді.
а как UI проверяет? на бэке и так проверяется, я хочу ещё поставить защиту на фронте
источник

AL

Anton Lempiy in Public | Kottans
JS перевіряє по суті так
if (able_to_spread_wings) <button>Spread wings</button>
до введення цієї практики js код виглядав так:
if (!is_human && (!is_american || (from_europe && has_visa()))) <button>Spread wings</button>
При цьому логіка дублювавлась на беку і на фронті і з часом через те що не було single point of trust почався розсинхрон і фронт ловив 400 в бевних кейсах
источник