Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.04.2020, 07:38
Аспирант
Отправить личное сообщение для jabbascript Посмотреть профиль Найти все сообщения от jabbascript
 
Регистрация: 27.11.2017
Сообщений: 45

Сформировать один массив роль\права из 3х
Здравствуйте!!!
Подскажите как можно сформировать из данных массивов полученных с апи:
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": "Контакты - Редактирование",
		}
	];

Пимерно такой т е основываясь на roleRights сформировать массив обьестов где содержится Роль и ее права.
const roles = [
		{
			"Id": 1,
			"Name": "Администратор",
			"right": [
				{
					"Id": 1,
					"Name": "Контакты - Просмотр",
				},
				{
					"Id": 2,
					"Name": "Контакты - Редактирование",
				}
			]
		},
		{
			"Id": 2,
			"Name": "Модератор",
			"right": [
				{
					"Id": 1,
					"Name": "Контакты - Просмотр",
				},
				{
					"Id": 2,
					"Name": "Контакты - Редактирование",
				}
			]
		},
	];
Ответить с цитированием
  #2 (permalink)  
Старый 09.04.2020, 08:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,115

jabbascript,
непонятно как формируется массив прав ...
Ответить с цитированием
  #3 (permalink)  
Старый 09.04.2020, 08:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

рони,
наверное так - roles[i][RoleId], соответственно и права по RightId
Ответить с цитированием
  #4 (permalink)  
Старый 09.04.2020, 09:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,115

Сообщение от laimas
права по RightId
не вижу массива RoleId
Ответить с цитированием
  #5 (permalink)  
Старый 09.04.2020, 09:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

рони,
roles[index][Id] == roleRight[index][RoleId] = "Администратор", ...
Соответственно и права но уже по равенству RightId и Id из rights. Видимо так.

Как только проверять такие права, не представляю.
Ответить с цитированием
  #6 (permalink)  
Старый 09.04.2020, 09:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,115

laimas,
нет массива индексов прав, нет массива правил
либо здесь "RightId": 1 массив
либо тут немассив "right": []
Ответить с цитированием
  #7 (permalink)  
Старый 09.04.2020, 09:51
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вообще, нужно не const roles модифицировать (да и не получится), а обходить первичный объект, а это const roleRight, вот это более всего отвечает первичной таблице в базе - юзеры. А roles и rights, это связанные таблицы описывающие роли и их права.

И все будет связываться, иначе нет логики.
Ответить с цитированием
  #8 (permalink)  
Старый 09.04.2020, 10:15
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

рони, надо конечно автора заставить высказаться, но по идее так должно быть:

Код:
users
-------------------------------
id | name  | role | right
-------------------------------
1  | Duke  | 1    | 1
2  | Sam   | 1    | 2
3  | John  | 2    | 2
4  | Peter | 3    | 1

roles
-------------------------------
id | name
-------------------------------
1  | Администратор
2  | Модератор
3  | Пользователь

rights
-------------------------------
id | name
-------------------------------
1  | Контакты - Просмотр
2  | Контакты - Редактирование
Вот так они и связаны. Если же все помещать в roles, то это равноценно запросу в базе, по которому нужно получить всех юзеров с определенными ролями, заодно и их права, в котором первичной таблицей выбрана таблица ролей. Если при этом то что содержится в roles, это не все имеющиеся роли, то еще ладно, есть какая-то логика в этом, иначе это мазохизм. Хотя и при таком условии, это не все равно тоже самое будет.
Ответить с цитированием
  #9 (permalink)  
Старый 09.04.2020, 12:03
Аспирант
Отправить личное сообщение для jabbascript Посмотреть профиль Найти все сообщения от jabbascript
 
Регистрация: 27.11.2017
Сообщений: 45

Это правильная структура. Тут 1на таблица содержит идишники роли и права.
{
"Id": 1,
"RoleId": 1, роль с ид 1
"RightId": 1 право с ид 2
}

Какбы у меня Odata и есть три урла /RoleRight /Role /Rights.

Последний раз редактировалось jabbascript, 09.04.2020 в 12:05.
Ответить с цитированием
  #10 (permalink)  
Старый 09.04.2020, 13:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

По представленным данным их никак не связать в то, что именно вы хотите получить.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Набор, массив, slideToggle miRrage jQuery 4 24.09.2017 17:18
Пустой массив при сохранении в localStorage kichkun Общие вопросы Javascript 1 19.11.2016 13:58
Чтение данных из файла в массив TheSingleElk Общие вопросы Javascript 2 16.06.2016 01:09
Сформировать массив данных и отправить его в PHP средствами JS westnord Общие вопросы Javascript 21 16.07.2013 12:18
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14