Оптимальный дизайн групп пользователей и разрешений базы данных Firebase Realtime

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

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

Это плохая практика? Не лучше ли иметь и роли, и группы?

Я также был бы признателен за некоторые отзывы о структуре, я подумал о двух разных способах, которыми я мог бы это сделать (вероятно, есть сотни других, но в интересах здравомыслия я ограничил их двумя). Имейте в виду, я пытаюсь сохранить структуру в соответствии с документами Firebase:

STRUCTURE A
permissions:
  groups:
    admin:
      woody: true
      buzz: true
    accounts:
      slinky: true
      jessie: true
  rules:
    root:
      admin:
        read: true
        write: true
    purchasing:
      accounts:
        read: true
        write: true
  exceptions:
    root:
      jessie:
        read: true

STRUCTURE B
groups:
  admin:
    members:
      woody: true
      buzz: true
    rules:
      root:
        read: true
        write: true
  accounts:
    members:
      slinky: true
      jessie: true
    rules:
      purchasing:
        read: true
        write: true

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

Надеюсь, это имеет смысл, если нет, пожалуйста, не стесняйтесь задавать уточняющие вопросы. Ваше здоровье!

Златовласка

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *