Proposals for user profiles.

Registered by Ilshad Khabibullin

Главное в построении реиспользуемой библиотеки для юзер-профайлов - это позволить использовать ее вне зависимости от аутентикатора (будь то стандартный 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 Informational
Milestone target:
None

Related branches

Sprints

Whiteboard

Реализовано полностью.

Насчет выталкивания в треверсе - пока сделано жестко для ice.app.localsite.interfaces.ISite следующее поведение с помощью кастомного publisher'а - url должен быть такой: site_url/users/principal_id.

Следует подумать, оставлять ли этот publisher таким или пусть он использует настраиваемые значения.
Но с этим нужно определятся в конце (может быть еще что-то придет в голову "выталкивать".)

========================================

Вследствие того, что дальнейшая разработка проекта отложена, предлагается выделить код для профайлов в Gist (http://gist.github.com) т.к. сам по себе он любопытен. Также любопытен в виде идиного файла для хакания. Тесты тоже в код.

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.