Proposals for user profiles.
Главное в построении реиспользуемой библиотеки для юзер-профайлов - это позволить использовать ее вне зависимости от аутентикатора (будь то стандартный principalfilder или кастомный или с использованием реляционных баз данных и так далее.) Здесь не должно быть никакого хардкода и предположений об окружениях.
Реализация:
- сам профайл - генерируемый "на лету" прокси объект, который можно "вытолкнуть" траверсом как нужно и куда нужно;
- этот прокси генерируется, предоставляя схему, назначенную в его фабрике;
- запись\чтение этих атрибутов - через Annotations. Для используемой по умолчанию реализации юзеров утилита уже есть. Кастомно можно назначить и другую.
- фабрика генерирует двойные прокси (первый уровень - профайл, второй уровень - секьюрити-прокси);
- фабрика является утилитой (лучше - глобальной, хотя можно и локальные. В ice.app это не должно определятся) и в одном из ее атрибутов задается интерфейс со схемой юзер-профайла. Также определен префикс. Поэтому могут одновременно использоваться разные фабрики (соответственно с разными схемами для профилей пользователей);
- диспетчер, который является суть адаптером от принципала к профайлу, просто выискивает фабрику с нужным префиксом;
- пусть будет дефолтная фабрика, что работало из коробки. Она должна использоваться если диспетчер не нашел нужной фабрики.
- профайл как прокси-объект должен иметь свою кастомную карту доступов (генерируемую динамически). Кажется, лучше сделать это не ролями, а просто permission map.
- в фабрике можно задавать кастомную политику по принципу "dictionary{атрибут юзер-профайловой схемы : пермишн}". 2 словаря - для доступов на чтение и для доступов на запись.
По умолчанию для каждого атрибута security checker дает доступ на редактирование владельцу и на просмотр всем.
Но это можно настроить в фабрике. Таким образом, можно в проектах декларировать отдельные атрибуты юзер-профайла, доступ на которыт открыт не всем, а только кому-то с определенными правами.
Blueprint information
- Status:
- Not started
- Approver:
- None
- Priority:
- Essential
- Drafter:
- None
- Direction:
- Needs approval
- Assignee:
- None
- Definition:
- Review
- Series goal:
- None
- Implementation:
- Informational
- Milestone target:
- None
- Started by
- Completed by
Related branches
Related bugs
Sprints
Whiteboard
Реализовано полностью.
Насчет выталкивания в треверсе - пока сделано жестко для ice.app.
Следует подумать, оставлять ли этот publisher таким или пусть он использует настраиваемые значения.
Но с этим нужно определятся в конце (может быть еще что-то придет в голову "выталкивать".)
=======
Вследствие того, что дальнейшая разработка проекта отложена, предлагается выделить код для профайлов в Gist (http://