Я использую C # для создания модели представления, которую позже сериализую в Json для использования с KnockoutJs.
Теперь мне нужно добавить информацию на уровне свойств, если определенный пользователь имеет доступ к просмотру и / илиотредактируйте свойство.
Поскольку у Javascript практически нет возможностей для отражения, я хочу сделать это с C # перед сериализацией в Json.
Моя модель представления может выглядеть следующим образом:
class ViewModel {
public string Name { get; set; }
}
Я хочу использовать службу доступа пользователей, которая будет принимать пользователя, у которого есть некоторые роли, и модель представления и проходить черезРоли и применять права доступа.Примерно так:
class AccessService {
public void Apply(IUser user, ViewModel viewModel) {
if(user.Roles.Contains(Roles.Admin)) {
viewModel.AllowRead(vm => vm.Name);
}
}
}
Метод viewModel.AllowRead(..)
будет методом расширения, который будет принимать object
(или, возможно, интерфейс или тип при необходимости), и именно здесь происходит волшебство.
Мне бы хотелось, чтобы результатом этой операции было то, что viewModel получит новое свойство с именем CanRead
, которое, в свою очередь, будет иметь логическое свойство с именем Name
.
* 1020.* Получившийся
viewModel
будет выглядеть так:
class ViewModel {
public string Name { get; set; }
public object CanRead { // Could non anonymous as well.
return new {
Name = true;
};
}
}
Можно ли это сделать с помощью динамики или мне нужно использовать Reflection.Emit?Я не прошу "покажи мне код".Я просто хочу знать, ментальна ли моя идея или возможно ли это.
Есть идеи?