Giter VIP home page Giter VIP logo

gdmn4's People

Contributors

gsbelarus avatar maisiukartyom avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

gdmn4's Issues

Управление учетными записями

Нам в проекте нужны следующие роли:

  1. Суперадмин -- видит все. Может делать все, в том числе назначать других Суперадминов.
  2. Админ организации -- может делать все в рамках своей организации, в том числе назначать других Админов.
  3. Developer в организации -- обладает всеми правами пользователя, а также может создавать подключения к источникам данных.
  4. Пользователь в организации -- может вести диалог с системой, просматривать данные.

У нас будут общие наборы данных, доступные любому пользователю системы, и наборы данных, доступные только в рамках какой-то организации.

User stories:

  1. Пользователь создает учетную запись. Может вести диалог с системой, обращаясь к общим наборам данных.
  2. Пользователь с учетной записью создает Организацию и становится в ней Админом. При логине пользователь указывает Организацию в которую он логинится. Если не указал -- то, логинится только в свою учетную запись и имеет доступ только к общим наборам данных.
  3. Пользователь с правами Админа в Организации может высылать инвайты другим пользователям системы для присоединения к Организации. При высылке инвайта указывается роль, которую получит новый пользователь Организации.

Делаем следующее:

Добавляем следующий функционал работы с организациями:

  1. Пользователь может создавать Организации.
  2. Организация имеет уникальное название в рамках нашей системы.
  3. Создав организацию, Пользователь получает права Администратора в этой Организации.
  4. Пользователь может одновременно входить в несколько Организаций.
  5. Администратор Организации может добавлять в нее других пользователей системы.
  6. Администратор может исключать Пользователей из организации.
  7. Администратор может назначать права Администратора другим Пользователям Организации.
  8. Пользователь Организации может выйти из Организации.

Добавляем следующий функционал для работы с учетными записями пользователей:

  1. Пользователь Системы может удалить свою учетную запись.

Интерфейс пользователя:

  1. На странице Профиль пользователя должна присутствовать кнопка для создания Организации.
  2. Если Пользователь входит в одну или несколько организаций, то на странице Профиль пользователя должна присутствовать таблица с его организациями. В таблице две колонки: Наименовани организации и Уровень доступа. Уровни доступа: Пользователь, Администратор.
  3. Если Пользователь имеет уровенень доступа Администратор, то он может перейти к списку пользователей выбранной Организации. В этом списке ему доступны команды: Добавить, Удалить, Сделать Администратором, Сделать Пользователем.

Простейший сигнал

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

Каждый Сигнал должен быть привязан к определенной Организации или к учетной записи Пользователя.

Создаем простейший сигнал. Пока из всех свойств делаем только:

  1. Наименование (должно быть уникальным в рамках Организации/учетной записи Пользователя)
  2. Признак активен/не активен.

Необходимо реализовать:

  1. Экран со списком (таблицей) сигналов
  2. Операции: добавления, удаления, редактирования сигнала.

Поправить код

  return (
    !isLoading && user.userId &&
    <>
      {/* {
        (chatInfo?.owner === userId) && 
        <div>
          <Input onChange={e => setParticipantId(e.target.value)}/>
          <Button onClick={handleAddParticipant}>Add participant</Button>
        </div>
        
      } */}
      {
          chatInfo.participants.includes(user.userId) && 
          <>
            <h3>{chatInfo.tag}</h3>
            <ChatView nlpDialog={nlpDialog} info={{chatId: chatInfo._id, user}}/>
          </>
        }
    </>  
  )

это лишнее усложнение кода. понятнее написать так:

  if (!isLoading && user.userId && chatInfo.participants.includes(user.userId)) {
    return(
      <>
         <h3>{chatInfo.tag}</h3>
         <ChatView nlpDialog={nlpDialog} info={{chatId: chatInfo._id, user}}/>
      </>          
    )
  }

  return null;

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.