(() => { const roleRight = [ { "Id": 1, "RoleId": 1, "RightId": 1 }, { "Id": 2, "RoleId": 1, "RightId": 2 }, { "Id": 3, "RoleId": 2, "RightId": 2 }, { "Id": 4, "RoleId": 3, "RightId": 1 }, ]; const roles = [ { "Id": 1, "Name": "Администратор", }, { "Id": 2, "Name": "Модератор", }, { "Id": 3, "Name": "Пользователь", }, ]; const rights = [ { "Id": 1, "Name": "Контакты - Просмотр", }, { "Id": 2, "Name": "Контакты - Редактирование", } ]; const usersRoles = (() => { const dictionaries = { roles, rights }; const dictionariesIndexed = Object.keys(dictionaries).reduce((res, key) => { res[key] = {}; dictionaries[key].forEach(item => { res[key][item.Id] = item; }); return res; }, {}); const result = roleRight.reduce((res, item) => { res[item.RoleId] = { Id: item.RoleId, Name: dictionariesIndexed.roles[item.RoleId].Name, Rights: [] }; return res; }, {}); roleRight.forEach(item => { const roleId = item.RoleId; const rightId = item.RightId; result[item.RoleId].Rights.push({ Id: item.RightId, Name: dictionariesIndexed.rights[item.RightId].Name }); }); return Object.values(result); })(); console.log(usersRoles); })(); |
Загуглите «database relationship types» Я ошибся, это many2many со сводной таблицей roleRight. Значения хранятся в 4-й таблице? По-моему это несколько неудобно. |
jabbascript,
const roleRight = [ { Id: 1, RoleId: 1, RightId: 1 }, { Id: 2, RoleId: 1, RightId: 2 }, { Id: 3, RoleId: 2, RightId: 2 }, { Id: 4, RoleId: 3, RightId: 1 } ]; const roles = [ { Id: 1, Name: "Администратор" }, { Id: 2, Name: "Модератор" }, { Id: 3, Name: "Пользователь" } ]; const rights = [ { Id: 1, Name: "Контакты - Просмотр" }, { Id: 2, Name: "Контакты - Редактирование" } ]; console.log( roles.map(role => { return { ...role, right: roleRight .filter(item => item.RoleId === role.Id) .map(item => rights.find(right => right.Id === item.RightId)) }; }) ); |
Nexus,
если roleRight описывает совокупность прав, то все нормально. Я только никак не могу понять - для кого это получается? |
https://jsben.ch/rrIQq Обидно.
Мой код производительнее на большем кол-ве данных. https://jsben.ch/T9HgF |
Цитата:
А с такой структурой таблиц это будет выглядеть, как прибитый сбоку костыль. Я это имел ввиду. Там либо делать связь к таблице role_right, либо придется делать таблицу role_right_value с полями: - id - role_id - right_id - value |
Я не об этом, я о 4-х таблицах - если первая пользователи, вторая роли, третья права, то четвертая вполне может описывать совокупность прав. А вот тут, это что-то непонятное - чего тут получаем?
А вообще, права лучше хранить как битовый набор, это упрощает проверку доступа. |
Часовой пояс GMT +3, время: 20:17. |