mickvav / maptaxonomy

Map biological taxonomy on geographical map.
0 stars 2 forks source link

Django #2

Closed fjdiod closed 7 years ago

fjdiod commented 7 years ago

Создал проект джанго, создал модели

mickvav commented 7 years ago

Так, ну уже хорошо, но кое-что надо бы переделать.

  1. Эксперимент имеет поля типа авторы, время/место, ссылка на источник (genbank id?) и содержит информацию об одном или нескольких экземплярах микроорганизмов/штаммов (strain_implementation)

  2. Экземпляр микроорганизма/штамма (strain_implementation) содержит информацию о том, какие именно данные экспериментаторы соотнесли с ним (ссылку на таксон, степень уверенности в этом знании, что-там-ещё может быть) и один либо несколько мобильных/заменимых элемента генома (genome_part это могут быть плазмиды в случае с бактериями и участки ДНК вируса в случае с вирусом гриппа, и какие ещё мобильные элементы в других задачах)

  3. Мобильный/заменимый элемент генома (genome_part) содержит сиквенс, отдельные read-ы (опционально?), ссылку на таксон, информацию о том, считаем ли мы этот элемент самостоятельным организмом или именно что мобильным элементом.

  4. Таксон - элемент таксономического дерева. Имеет уникальный идентификатор, (опциональное) наименование, ссылку на родительский элемент, информацию о том, откуда мы взяли именно этот таксон (сгенерировали сами/выкачали дерево из интернета/whatever)

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

fjdiod commented 7 years ago

Ок, за сегодня сделаю скорее всего. Кстати, задачи будем через issues выставлять?

mickvav commented 7 years ago

Да, вполне себе вариант. Городить отдельный трекер - не вижу смысла.

fjdiod commented 7 years ago

Модель поменял, но пока ничего не переименовывал. Узнал, кстати, про такую штуку http://postgis.net/, она нам может для чего пригодится?

mickvav commented 7 years ago

При проектировании полей нужно выбрать какую-то строгую нотацию для полей, присутствующих во всех таблицах. И вы, как я понимаю, придерживаетесь идеи - " ('id','name') есть почти всегда " - продолжайте придерживаться, думаю, оно ок.

Да, потом накатим ещё сверху сущностей:

  1. Проект может содержать один или несколько экспериментов (при этом один эксперимент может относиться к одному или нескольким проектам, а экземпляр штамма - строго к одному эксперименту!)

  2. Пользователь (логин/пароль/механизм авторизации/ФИО.../Роль)

  3. Роль (ID,название,приоритет) - аноним/пользователь/куратор эксперимента/администратор/whatever.

  4. Право доступа (ID, Название) - Чтение, Запись, Обновление - по меньшей мере. Потом, вероятно, появятся какие-то ещё.

  5. Сущность (ID, имя таблицы, комментарий)

  6. Право роли (ID,RoleID,PermissionID,Приоритет,"Allow/Deny/MayBeAllow/MayBeDeny",RowLevelAccess,RowLevelTable)

    Логика в этом месте будет, например, такая - если некто запрашивает некоторую операцию с базой, мы сначала сортируем в порядке убывания суммарного приоритета все права ролей, к которым относится пользователь. Идём по ним. Если встречаем "Deny" - запрещаем операцию. Если встречаем "Allow" - разрешаем операцию. Если встречаем "RowLevelAccess" - делаем второй запрос на доступ уже к конкретному полю (к таблице RowLevelTable). "MayBeAllow" - запоминаем, что надо бы разрешить, ЕСЛИ ниже по приоритету нет ничего. "MayBeDeny" - запоминаем, что надо бы запретить, ЕСЛИ ниже по приоритету нет ничего. Если что-то ещё есть - идём вниз. (Предлагаю в этом месте обсудить, прежде чем реализовывать - возможно, я что-то забыл/не продумал/whatever)

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

mickvav commented 7 years ago

По postgis - однозначно пригодится, но тут мы уже подходим к тому, чтобы писать deployment-скрипты, которые разворачивают на свеженькой виртуалочке всё-то-что-нам-нужно.

mickvav commented 7 years ago

И переименуйте уже influenza.

fjdiod commented 7 years ago

Переименовал, насчет пользователей и ролей в джанго есть встроенная модель пользователей https://docs.djangoproject.com/en/1.11/topics/auth/ там можно задавать права и распределять их по группам.

mickvav commented 7 years ago

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

mickvav commented 7 years ago

Сергей, я вынес тему с инсталляцией в issues - проверьте, пожалуйста, что я правильно понимаю логику гитхаба и вы можете на неё подписаться и "assign" - https://github.com/mickvav/maptaxonomy/issues/3

fjdiod commented 7 years ago

Я могу на нее подписаться, но назначить меня на выполнение можете только вы.

mickvav commented 7 years ago

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

fjdiod commented 7 years ago

Подписался