Назначение другой роли члену группы

Прошу совета по не очень конкретной ситуации.

Сейчас у меня около 20000 магазинов. Во всех магазинах есть администраторы, менеджеры и роли пользователей.

  • Администратор может создавать/управлять любыми ролями
  • Менеджер может создавать/управлять только ролью пользователя
  • Пользователь может войти в систему и получить доступ к пользовательским функциям.

Любой персонаж может быть назначен 1 или нескольким магазинам и может иметь 1 или несколько ролей для этого конкретного магазина. То есть:

  • В StoreA пользователь A является администратором, а пользователь B — менеджером.
  • В StoreB пользователь А является пользователем, а пользователь Б — администратором.

Сначала я преобразовал свои магазины в группы. Но так как роли привязаны к группе, у меня все равно было бы 3 роли для каждой группы (20000 групп и 60000 ролей - Group StoreA, Роли: StoreA_Admin, StoreA_Manager, StoreA_User и т.д...). Не уверен, что это правильное решение, И я не уверен в производительности.

Затем я сохранил хранилища как группы, но вместо создания ролей я создал настраиваемые многозначные атрибуты, которые сохраняют uid группы. Это работало в углероде, а также в API, но консоль не любит многозначные поля. И если будет введена другая роль, мне придется создать еще одно поле.

Любая мысль о том, как подойти к этой ситуации?

Привет, @WaZz, не могли бы вы предоставить и эту информацию? Какую версию IS вы используете? У вас есть только одно хранилище пользователей на сервере IS?

Anuradha Karunarathna 01.11.2022 04:45

Привет @AnuradhaKarunarathna, я использую IS 6.0.0 с 1 хранилищем пользователей.

WaZz 01.11.2022 14:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем сопоставить вашу историю с группами и ролями ИС следующим образом.

Обратите внимание, что начиная с версии IS-5.11.0 группы и роли рассматриваются как два отдельных ресурса.

Ссылаться на:

Это разделение не четко видно в консоли управления. Таким образом, вы можете использовать консольное приложение для создания групп и ролей.

  • Группа, используемая для представления набора пользователей в пользовательском хранилище. Один пользователь может принадлежать к нулю или более группам.
  • Роль — это набор разрешений. Роль может иметь ноль или более разрешений.
  • Мы можем назначить роль либо группе, либо пользователю.

Благодаря этому утверждению:

Пользователь может войти в систему и получить доступ к пользовательским функциям.

Нам не нужно специально назначать какую-либо роль обычным бизнес-пользователям. Никакая конкретная роль не требуется для входа в бизнес-приложение через базовую аутентификацию сервера идентификации. Если ваше бизнес-приложение имеет управление доступом на основе ролей, необходимо также назначить роль бизнес-пользователям. В противном случае каждый пользователь получит права входа в систему после успешной аутентификации, этого должно быть достаточно для выполнения бизнес-операций в приложении.

В вашем случае, если администратор любого магазина имеет одинаковый набор разрешений и любой менеджер имеет одинаковый набор разрешений, вы не можете просто оценить разрешения и авторизовать запросы. Например: если пользователь B является менеджером магазина A и администратором магазина B, он унаследовал разрешения, связанные с ролями администратора и менеджера. Но пользователь B выполняет запрос в хранилище B, вы должны авторизовать запрос только на основе ролей, связанных с хранилищем B.

Спасибо за ваш ответ @AnuradhaKarunarathna. Итак, для 20 000 магазинов мне потребуется 60 000 групп, а также 40 000 ролей? Может ли такое количество групп/ролей повлиять на производительность?

WaZz 01.11.2022 17:17

Это вопрос улучшения производительности сохраняющегося слоя. Если ваше хранилище пользователей и общая база данных правильно проиндексированы и точно настроены для получения групп пользователей и ролей, среда выполнения сервера идентификации сможет обрабатывать запросы.

Anuradha Karunarathna 05.11.2022 00:25

@WaZz, если ваши роли менеджера и администратора в каждом магазине сопоставляются один к одному с соответствующей группой, наличие этих групп не имеет большого значения, поскольку вы можете напрямую назначать роль пользователям.

Maduranga Siriwardena 09.11.2022 16:57

Другие вопросы по теме