J'ai la classe d'autorisation suivante. Comment puis-je faire de cette disposition dans toutes les vues sans avoir à utiliser l'instruction suivante en utilisant dans chaque vue @using MyApp.Extensions
ASP MVC Make Class, espace de noms disponible dans tous les affichages
using System.Security.Principal;
namespace MyApp.Entensions
{
public class Permissions
{
private readonly IPrincipal user;
public Permissions(IPrincipal user)
{
this.user = user;
}
public bool CanEditItems
{
get { return user.IsInAnyRole("Manager", "Admin"); }
}
public bool CanDeleteItems
{
get { return user.IsInAnyRole("Admin"); }
}
// Other permissions
}
}
J'ai essayé d'ajouter à l'web.config vues comme suit, mais je ne suis pas IntelliSense quand tryin appeler quelque chose comme @if (User.CanDeleteItems)
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="MyApp.Extensions" />
</namespaces>
</pages>
Ne voulez-vous pas dire @ model.user.CanDeleteItems ou quelque chose comme ça? Sinon, quel est l'utilisateur dans votre fichier cshtml? –
@Peter vous avez mal compris. Je ne passe pas dans un modèle. La classe étend le IPrinciple afin que l'utilisateur soit l'utilisateur actuellement connecté. – adam78
Donc, vous faites une vérification et le rendu du contenu de la vue en fonction du résultat booléen de cette condition? Si oui, ne seriez-vous pas mieux enveloppant votre contenu au niveau du fichier de mise en page? – LDJ