Я работаю над приложением ASP.NET MVC3 и аннотировал свою модель атрибутом, который указывает, какие роли могут изменять определенные поля для любого возможного состояния, в котором находится модель. Возьмем это как пример:
public class Model
{
[RoleLimiter(
new[]{Role.Admin, Role.BasicUser, Role.Validator}, // for draft
new[]{Role.Admin, Role.BasicUser, Role.Validator}, // for awaiting validation
new[]{Role.Admin})] // for published etc
public string Subject {get;set;}
}
Это выглядит немного грязно, конечно, но это очень легко изменить при необходимости.Теперь, когда у меня есть это, легко проверить для каждого поля текущий статус, а затем получить список ролей, которые могут его изменить.Если текущей роли в нем нет, я добавлю класс disabled
к элементу управления.
Далее я хотел бы создать расширение HtmlHelper
, имеющее тот же синтаксис, что иобычный EditorFor
(или даже прямой TextBoxFor
), но делает эту дополнительную проверку и автоматически добавляет атрибут за сцену, но я застрял при получении информации о поле из выражения, то есть:
Как перейти от
HtmlHelper.TextBoxWithRoleLimitationsFor(x=>x.Subject);
к атрибуту, прикрепленному к x.Subject
?