(() => {
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, время: 05:53. |