Мне нужно создать функцию, которая могла бы объединить все роли из групп пользователей, чтобы один пользователь мог иметь доступ ко всем заданным ролям.
public function GetRoles($id = 'new', $module = null) {
$json = [];
$groups = array_merge((array) ($this->auth['payload']['group'] ?? null), (array) ($this->auth['payload']['additionalGroup'] ?? null));
$access = GetAccess($module ?? $this->module, $groups);
$json['insert'] = ($id === 'new' && in_array('insert', $access)) ? true : null;
$json['view'] = ($id === 'view' && in_array('view', $access)) ? true : null;
$json['update'] = ($id !== 'new' && in_array('update', $access)) ? true : null;
$json['delete'] = ($id !== 'new' && in_array('delete', $access)) ? true : null;
$json['upload'] = ($id !== 'new' && in_array('upload', $access)) ? true : null;
$json['remove'] = ($id !== 'new' && in_array('remove', $access)) ? true : null;
$json['inactive'] = ($id !== 'new' && in_array('inactive', $access)) ? true : null;
$json['approve'] = ($id !== 'new' && in_array('approve', $access)) ? true : null;
$json['cancel'] = ($id !== 'new' && in_array('cancel', $access)) ? true : null;
$json['reopen'] = ($id !== 'new' && in_array('reopen', $access)) ? true : null;
return $json;
}
function GetAccess($module, $groups, $role = null) {
global $config;
$rules = [];
$modules = ModuleMerge($config['modules']);
if (isset($config['access'][$module])) {
foreach ($config['access'][$module] ?? [] as $key => $value) {
if (in_array($key, $groups)) {
$rules = array_unique(array_merge($rules, $value));
}
}
} else if (in_array($module, ['main', 'login', 'login_google', 'register', 'reset', 'newpassword', 'validate', 'contact_us', 'disclaimer', 'privacy_policy', 'security_policy', 'terms_condition', 'help'])) {
$rules = ['view', 'insert', 'update'];
} else {
$rules = $modules[$module];
}
if ($role) {
$rules = in_array($role, $rules);
}
return $rules;
}
function ModuleMerge($array) {
$result = [];
for ($i = 0; $i < count($array); $i++) {
$moduleKey = $array[$i]['module'] ?? null;
if (!isset($result[$moduleKey])) {
$result[$moduleKey] = [];
}
$result[$moduleKey] = $result[$moduleKey]
? array_unique(array_merge($result[$moduleKey], $array[$i]['roles'] ?? []))
: ($array[$i]['roles'] ?? []);
if (is_array($array[$i]['children'] ?? null)) {
$result = array_merge($result, ModuleMerge($array[$i]['children']));
}
}
return $result;
}
Пользователь 1
Основная группа -> ['Сотрудники']
Дополнительная группа -> ['Администратор магазина', 'Товары' ', 'Инвентарь SV']
Роли сотрудников группы -> ['Просмотр главной панели управления', 'редактировать профиль', 'загрузить изображение профиля']
Группа Роли администратора магазина -> ['Просмотреть страницу модуля магазина', 'добавить товар в магазине', 'обновить товар в магазине', 'удалить товар в магазине', 'одобрить товар в магазине']
Группировать роли товаров -> ['Просмотреть наличие товара ', 'вставить получателя товара']
На данный момент пользователь 1 имеет доступ только к основным ролям группы, дополнительные роли группы не объединяются, поэтому пользователь не имеет доступа!
Я ожидаю, что Пользователь 1 также сможет иметь доступ к дополнительным ролям группы.
Фактический результат ->
['View main dashboard', 'edit profile', 'upload profile picture']
Ожидаю такого результата ->
['View main dashboard', 'edit profile', 'upload profile picture', 'View store module page', 'add store item', 'update store item', 'delete store item', 'approve store item', 'View merchandise stock', 'insert merchandise recipient']
Подробнее здесь: https://stackoverflow.com/questions/791 ... r-multiple
Как контролировать и объединять все роли из нескольких групп пользователей. Один пользователь, несколько групп пользоват ⇐ Php
Кемеровские программисты php общаются здесь
1732503593
Anonymous
Мне нужно создать функцию, которая могла бы объединить все роли из групп пользователей, чтобы один пользователь мог иметь доступ ко всем заданным ролям.
public function GetRoles($id = 'new', $module = null) {
$json = [];
$groups = array_merge((array) ($this->auth['payload']['group'] ?? null), (array) ($this->auth['payload']['additionalGroup'] ?? null));
$access = GetAccess($module ?? $this->module, $groups);
$json['insert'] = ($id === 'new' && in_array('insert', $access)) ? true : null;
$json['view'] = ($id === 'view' && in_array('view', $access)) ? true : null;
$json['update'] = ($id !== 'new' && in_array('update', $access)) ? true : null;
$json['delete'] = ($id !== 'new' && in_array('delete', $access)) ? true : null;
$json['upload'] = ($id !== 'new' && in_array('upload', $access)) ? true : null;
$json['remove'] = ($id !== 'new' && in_array('remove', $access)) ? true : null;
$json['inactive'] = ($id !== 'new' && in_array('inactive', $access)) ? true : null;
$json['approve'] = ($id !== 'new' && in_array('approve', $access)) ? true : null;
$json['cancel'] = ($id !== 'new' && in_array('cancel', $access)) ? true : null;
$json['reopen'] = ($id !== 'new' && in_array('reopen', $access)) ? true : null;
return $json;
}
function GetAccess($module, $groups, $role = null) {
global $config;
$rules = [];
$modules = ModuleMerge($config['modules']);
if (isset($config['access'][$module])) {
foreach ($config['access'][$module] ?? [] as $key => $value) {
if (in_array($key, $groups)) {
$rules = array_unique(array_merge($rules, $value));
}
}
} else if (in_array($module, ['main', 'login', 'login_google', 'register', 'reset', 'newpassword', 'validate', 'contact_us', 'disclaimer', 'privacy_policy', 'security_policy', 'terms_condition', 'help'])) {
$rules = ['view', 'insert', 'update'];
} else {
$rules = $modules[$module];
}
if ($role) {
$rules = in_array($role, $rules);
}
return $rules;
}
function ModuleMerge($array) {
$result = [];
for ($i = 0; $i < count($array); $i++) {
$moduleKey = $array[$i]['module'] ?? null;
if (!isset($result[$moduleKey])) {
$result[$moduleKey] = [];
}
$result[$moduleKey] = $result[$moduleKey]
? array_unique(array_merge($result[$moduleKey], $array[$i]['roles'] ?? []))
: ($array[$i]['roles'] ?? []);
if (is_array($array[$i]['children'] ?? null)) {
$result = array_merge($result, ModuleMerge($array[$i]['children']));
}
}
return $result;
}
Пользователь 1
Основная группа -> ['Сотрудники']
Дополнительная группа -> ['Администратор магазина', 'Товары' ', 'Инвентарь SV']
Роли сотрудников группы -> ['Просмотр главной панели управления', 'редактировать профиль', 'загрузить изображение профиля']
Группа Роли администратора магазина -> ['Просмотреть страницу модуля магазина', 'добавить товар в магазине', 'обновить товар в магазине', 'удалить товар в магазине', 'одобрить товар в магазине']
Группировать роли товаров -> ['Просмотреть наличие товара ', 'вставить получателя товара']
На данный момент пользователь 1 имеет доступ только к основным ролям группы, дополнительные роли группы не объединяются, поэтому пользователь не имеет доступа!
Я ожидаю, что Пользователь 1 также сможет иметь доступ к дополнительным ролям группы.
Фактический результат ->
['View main dashboard', 'edit profile', 'upload profile picture']
Ожидаю такого результата ->
['View main dashboard', 'edit profile', 'upload profile picture', 'View store module page', 'add store item', 'update store item', 'delete store item', 'approve store item', 'View merchandise stock', 'insert merchandise recipient']
Подробнее здесь: [url]https://stackoverflow.com/questions/79183365/how-to-control-and-merge-all-roles-from-multiple-user-groups-one-user-multiple[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия