ASP.NET MVC - Отображение значения формы по роли - PullRequest
2 голосов
/ 07 октября 2009

Я ищу идеальный способ отображения форм ввода в виде текстового поля (редактируемого), метки (только для чтения) или скрытого (без доступа) в зависимости от ролей. Я знаю, что у меня могут быть разные взгляды для каждого типа ролей, но я надеялся, что появилось что-то новое, что помешало бы мне сделать 80 просмотров.

Ответы [ 3 ]

3 голосов
/ 08 октября 2009

На самом деле все зависит от того, где вы хотите установить связанные с безопасностью метаданные. Что вы хотите сделать? Украсить ваши модели представления с атрибутами? Использовать классы метаданных динамических данных? Свободная конфигурация аля StructureMap / FluentNhibernate?

Один из способов сделать это с помощью MVC Preview 2 или проекта InputBuilder с сайта lostechies.com и атрибутов украшений - переопределить UIHint и предоставить свои собственные значения UIHint обратно создателям шаблонов:

public class RoleUI : UIHintAttribute
{
    public RoleUI( string roles ) : base("","")
    {
        if( HttpContext.WhereverTheRoleStuffIs == "Admin" ) 
        //could be Session["CurrentUser"] too
        {
            this.UIHint = "Input";
        }

        this.UIHint = "Label";
    }

}

Итак, ваш вид модели:

public class AwesomeModel
{
    [RoleUI("Admin")]
    public string FirstName { get; set; }
}

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

0 голосов
/ 07 октября 2009

У вас может быть собственный элемент управления Html, который проверяет роль пользователя и затем решает, что делать.

Я сделал это с помощью Actionlinks, создал Html.ActionLinkSecured

Namespace System.Web.Mvc.Html
{
public static class HtmlHelperExtensions
{
    public static string ActionLinkSecured(this HtmlHelper htmlHelper, string linkText, string action, string controller, object routeValues, bool showDisabled)
    {
      //check if user is logged in or whatever you wanna check
      //if ok
      return htmlHelper.ActionLink(...);
      //else
      return linkText
    }
}

Вы можете иметь все, что хотите ... текст, текстовое поле, отключенное текстовое поле ...:)

0 голосов
/ 07 октября 2009

Я думаю, что вам лучше иметь вид только для чтения и редактируемый вид, я боюсь.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...