Детали задачи
-
История
-
Решение: Готово
-
Medium
-
Не заполнено
-
Не заполнено
-
Не заполнено
Описание
Добавить в ecos-model новые артефакт workspace и новый тип workspace-member
Деплой через артефакты в первой итерации нужен только для workspace (если решим деплоить workspace-member, то сделаем отдельной задачей).
В рамках задачи в админке должен появиться новый журнал workspaces (рабочие пространства) с возможностью создать и редактировать записи в нем.
Тип workspace-member
Атрибуты (связь с workspace по child ассоциации workspaceMembers)
- id: authority mandatory: true type: AUTHORITY - id: memberRole mandatory: true type: TEXT # USER/MANAGER
queryPermsPolicy: PUBLIC
Управление правами на просмотр и редактирование кастомное - на основе прав на _parent (workspace).
Тип workspace
Атрибуты
- id: name type: MLTEXT mandatory: true - id: workspaceMembers type: ASSOC multiple: true config: typeRef: emodel/type@workspace-member child: true - id: visibility # PUBLIC/PRIVATE mandatory: true type: TEXT
queryPermsPolicy: PUBLIC
Управление правами кастомное:
- В query запросе если пользователь не админ и не система, то добавляем условия поиска (visibility = PUBLIC OR workspaceMembers.authority IN [authorities_пользователя])
- Пользователь имеет права на чтение если найдется workspace-member с фильтром по _parent (workspace) и authority in [authorities_пользователя]
- Пользователь имеет права на запись если найдется workspace-member по условиям из п.2 И memberRole = MANAGER
Права на создание новых workspace'ов должны быть у всех пользователей системы.
При создании нового workspace на форме текущий пользователь должен быть добавлен в workspaceMembers с ролью MANAGER
В RecordsDao для workspace в методе getRecordsAtts предусмотреть поддержку виртуальных персональных рабочих пространств. Если id рабочего пространства начинается на user$, то:
- Проверяем что текущий пользователь система, или админ или его username равен тому что находится после знака '$'
- Если условие 1 не выполнилось, то возвращаем EmptyAttValue.INSTANCE (в target DAO запрос не отправляем)
- Если условие 1 выполнилось, то возвращаем сгенерированную DTO персонального рабочего пространства. В DTO должен быть один member с ролью manager (тот что записан после 'user$'), должно быть имя и id, который равен тому что пришло в getRecordsAtts
В ходе выполнения задачи подготовить примеры запросов:
- Получение всех доступных рабочих пространств (где пользователь member или visibility == PUBLIC)
- Получение всех рабочих пространств, в которые добавлен пользователь (где пользователь member)