Роли и разные представления одного и того же класса

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

В вашей системе мы имеем класс с неизменным количеством полей, но с разными уровнями доступа для ролей.
Как реализовать (и возможно ли) работающий у нас сценарий в вашей системе?

Forums: 

Изображение пользователя st.

В чём проблема?

Сущность (класс) одна, представлений у неё много. Реализовать представления можно в том числе и как функцию принадлежности текущего пользователя к роли. Механизмов в природе существует великое множество: от проекций (view) уровня СУБД до сокрытия полей ввода/вывода на формах.

Изображение пользователя st.

Это означает

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

а не означает

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

Изображение пользователя st.

Это один

Это один из вариантов реализации: от базового класса наследуем несколько производных, не добавляющих новых полей (но, возможно, скрывающих часть имеющихся), далее ролям даётся доступ к только определенному классу-потомку.

а какие есть 2

а какие есть 2 других варианта?

Изображение пользователя st.

Другие варианты

Другие варианты, через интерфейсы (проекция реализует описанный в метаданных интерфейс) либо агрегация (класс состоит из других, доступ даётся на уровне этих частей).

Сокрытие полей

Сокрытие полей на форме - не выход - иначе рушится идея что этот же юзер может даже в БД ковырятьса под своим аккаунтов

Генерация новой проекции - как ее генерировать, кто и когда?
Ведь для конкретной роли может не только количество полей меняться но и логика обработки!
Где ж и как ее хранить!?

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

Не понятно как в вашей системе можно такое организовать!?

Изображение пользователя st.

"Смешались в кучу кони, люди..."

1. Ничего не рушится, если в системе 3 и более звеньев.
2. Генерация проекций производится после изменения метаданных.
3. Можно генерировать и логику. Для этого вам сначала придется научиться её описывать в терминах модели или языка предметной области. Это сложно, поэтому существуют концептуально более простые способы, например, вынос логики в обработчики событий. Сами события декларируются в метаданных.