La détection est un utilisateur est un administrateur (ou tout autre type) par page, asp.net mvc fournisseur par défaut d'adhésion

StackOverflow https://stackoverflow.com/questions/4140268

Question

Je construis une application web, et je voudrais faire certaines fonctions à l'extrémité avant visible lorsqu'un utilisateur est connecté en tant qu'administrateur.

J'utilise le fournisseur d'appartenances par défaut, mais j'ai une table d'extension appelée Userfields que j'utilise pour stocker les paramètres utilisateur.

Je venez d'ajouter un champ UserType à cette table, et je envisage maintenant comment sera préférable de choisir ce sur les pages.

Je ne veux pas vraiment avoir à ajouter du code supplémentaire à chaque méthode du contrôleur pour obtenir ces informations sur le db, et le transmettre à travers.

Y at-il une meilleure façon de le faire, soit en utilisant les paramètres construit dans des rôles de membres de asp.net, ou est-il un moyen de frais que je peux exposer ces informations de mon db, de la même manière fonctionne User.Identity.Name ou (User.Identity.Name) .ProviderUserKey;

Était-ce utile?

La solution

Tant que vous utilisez la méthode d'authentification standard qui place l'objet utilisateur dans le contexte, il ne devrait pas être trop dur. Selon vous, utilisez Html.RenderPartial et le contrôleur approprié pour accomplir ce que vous voulez comme ça ...

/ Accueil / Index Vue:

<div id="menu">
<ul>
<li>Page 1</li>
<li>Page 2</li>
<% Html.RenderPartial("/Home/AdminView"); %>
</ul>
</div>

/ Accueil / Admin Voir:

<li>Admin 1</li>
<li>Admin 2</li>

/ Shared / Vide Vue:

<!--Empty view for non-viewable admin stuff-->

/ Home Contrôleur:

public ActionResult AdminView()
{
  //Check if user is admin
  //This should be your own logic... I usually have a few static methods that the 
  //Users or User object has to assist with checking
  if (Models.User.IsAdmin(HttpContext.User.Identity.Name))
  {
    return View();
  }
  else
  {
    return View("Empty");
  }
}

Cela devrait fonctionner ... Il est comment je le fais. Si elle est mal, nous espérons que quelqu'un plus intelligent affiche une meilleure réponse afin que nous puissions apprendre à la fois

EDIT:

Juste pensé à quelque chose d'autre ... Si votre objet utilisateur met en œuvre IPrincipal, vous pouvez l'extraire du contexte, le jeter à votre type d'utilisateur et ont le droit d'information dans la classe utilisateur ...

Un peu comme cela

class User : IPrincipal
{
  //Implement IPrincipal stuff
  public string Role { get; set; }
}

Alors la logique de vue admin pourrait ressembler à ceci:

public ActionResult AdminView()
{
  //Check if user is admin
  //This should be your own logic... I usually have a few static methods that the 
  //Users or User object has to assist with checking
  if ( ((Model.User)HttpContext.User).Role =="Admin" )
  {
    return View();
  }
  else
  {
    return View("Empty");
  }
}

Autres conseils

Utilisez les rôles asp.net -., Vous pouvez utiliser des attributs d'autorisation sur vos contrôleurs pour faire en sorte que l'utilisateur dispose des rôles pertinents définis

Voir

scroll top