0 votes

Vues dynamiques basées sur des modèles de vues

J'ai une application asp.net mvc 2. J'ai besoin d'afficher la même page à chaque utilisateur. Mais chaque utilisateur a des droits différents sur les données. Par exemple, certains peuvent voir mais pas éditer certaines données, d'autres ne peuvent ni éditer ni voir les données. Idéalement, les données qui ne peuvent être vues ou modifiées sont des espaces blancs dans la vue. Pour des raisons de sécurité, je souhaite que mes modèles de vue soient aussi peu nombreux que possible. Je veux dire par là que si un champ ne peut être ni vu ni édité, il ne doit pas figurer dans le modèle de vue. Il est évident que je peux écrire une vue pour chaque modèle de vue, mais cela semble être du gaspillage. Voici donc mon idée/liste de souhaits

Puis-je décorer le viewmodel avec des attributs et m'accrocher à un événement de pré-rendu des aides html et lui demander de faire   à la place ???

Puis-je avoir la sortie des aides html   pour les entrées non trouvées dans le modèle de vue ??

o

Est-il possible de convertir facilement une vue en code, puis de programmer le balisage et de le placer dans le moteur de rendu pour qu'il soit traité et affiché en html du côté client ?

0voto

Jarrett Meyer Points 11147

De la manière dont vous avez formulé la question, je crains que toute réponse n'aboutisse à une vision assez complexe. C'est au contrôleur qu'il incombe de décider quelle vue afficher (et quel modèle de vue construire) en fonction des rôles de l'utilisateur.

EDIT 1 : Réponse au commentaire

Pourriez-vous faire quelque chose comme cela ?

<% if (Model.AllowEdit) { %>
    <%= Html.TextBoxFor(x => x.SomeProperty); %>
<% } else if (Model.AllowView) { %>
    <%= Html.Encode(Model.SomeProperty) %>
<% } else { %>
    <span>You may not view this property.</span>
<% } %>

Cela pourrait se traduire par un contrôle des aides.

public static ExtensionsOfHtmlHelper
{
    public static MvcHtmlString DynamicTextBox(this HtmlHelper html, Func<TModel, object> lambda, bool edit, bool view)
    {
        if (edit)
        {
            return html.TextBoxFor(lambda);
        }
        else if (view)
        {
            return html.LabelFor(lambda);
        }
        else
        {
            return MvcHtmlString.Create("<span>You may not view this value.</span>");
        }
    }
}

Alors, selon vous,

<%= Html.DynamicTextBox(x => x.SomeProperty, Model.AllowEdit, Model.AllowView) %>

Quelque chose d'assez proche de cela devrait fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X